From ffc637ed119900ccab5ce8767488ae8227384500 Mon Sep 17 00:00:00 2001 From: Mark Stosberg Date: Wed, 22 Apr 2026 12:19:51 -0400 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=90=9B=20Fixed=20scheduled=20email-on?= =?UTF-8?q?ly=20posts=20to=20require=20newsletter=20reference.=20(#24517)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #24490 This prevents accidentally scheduling an email to zero recipients. --- ghost/core/core/server/models/post.js | 11 +++++- .../test/e2e-api/admin/posts-legacy.test.js | 35 +++++++++++++++++++ .../test/e2e-frontend/preview-routes.test.js | 4 +++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/ghost/core/core/server/models/post.js b/ghost/core/core/server/models/post.js index f54c13b8a97..a8d0380c199 100644 --- a/ghost/core/core/server/models/post.js +++ b/ghost/core/core/server/models/post.js @@ -31,7 +31,8 @@ const messages = { invalidMobiledocStructure: 'Invalid mobiledoc structure.', invalidMobiledocStructureHelp: 'https://ghost.org/docs/publishing/', invalidLexicalStructure: 'Invalid lexical structure.', - invalidLexicalStructureHelp: 'https://ghost.org/docs/publishing/' + invalidLexicalStructureHelp: 'https://ghost.org/docs/publishing/', + emailOnlyWithoutNewsletter: 'Scheduling an email requires a newsletter reference.' }; const MOBILEDOC_REVISIONS_COUNT = 10; @@ -817,6 +818,14 @@ Post = ghostBookshelf.Model.extend({ // NOTE: this is a stopgap solution for email-only posts where their status is unchanged after publish // but the usual publis/send newsletter flow continues const hasEmailOnlyFlag = _.get(attrs, 'posts_meta.email_only') || model.related('posts_meta').get('email_only'); + + // Require newsletter reference for scheduled email-only posts + if (hasEmailOnlyFlag && newStatus === 'scheduled' && this.hasChanged('status') && !this.get('newsletter_id') && !options.newsletter) { + return Promise.reject(new errors.ValidationError({ + message: tpl(messages.emailOnlyWithoutNewsletter) + })); + } + if (hasEmailOnlyFlag && (newStatus === 'published') && this.hasChanged('status')) { this.set('status', 'sent'); } else if (!hasEmailOnlyFlag && (newStatus === 'sent') && this.hasChanged('status')) { diff --git a/ghost/core/test/e2e-api/admin/posts-legacy.test.js b/ghost/core/test/e2e-api/admin/posts-legacy.test.js index 83cccdef750..27ca8f282ea 100644 --- a/ghost/core/test/e2e-api/admin/posts-legacy.test.js +++ b/ghost/core/test/e2e-api/admin/posts-legacy.test.js @@ -1557,6 +1557,41 @@ describe('Posts API', function () { assert(['pending', 'submitted', 'submitting'].includes(email.get('status'))); }); + it('Cannot schedule an email only post without newsletter reference', async function () { + const post = { + title: 'My scheduled email only post without newsletter', + status: 'draft', + mobiledoc: testUtils.DataGenerator.markdownToMobiledoc('my post') + }; + + const res = await request.post(localUtils.API.getApiQuery('posts')) + .set('Origin', config.get('url')) + .send({posts: [post]}) + .expect('Content-Type', /json/) + .expect('Cache-Control', testUtils.cacheRules.private) + .expect(201); + + const id = res.body.posts[0].id; + const updatedPost = res.body.posts[0]; + + updatedPost.status = 'scheduled'; + updatedPost.email_only = true; + updatedPost.published_at = moment().add(2, 'days').toDate(); + + // Attempt to schedule without newsletter reference should fail + await request + .put(localUtils.API.getApiQuery('posts/' + id + '/')) + .set('Origin', config.get('url')) + .send({posts: [updatedPost]}) + .expect('Content-Type', /json/) + .expect('Cache-Control', testUtils.cacheRules.private) + .expect(422) + .expect((result) => { + assert.equal(result.body.errors[0].message, 'Validation error, cannot edit post.'); + assert.equal(result.body.errors[0].context, 'Scheduling an email requires a newsletter reference.'); + }); + }); + it('Can\'t change the newsletter once it has been sent', async function () { // Note: this test only works if there are members subscribed to the initial newsletter // (so it won't get reset when changing the post status to draft again) diff --git a/ghost/core/test/e2e-frontend/preview-routes.test.js b/ghost/core/test/e2e-frontend/preview-routes.test.js index 8a4e5bf8bdd..0e8ef1658c9 100644 --- a/ghost/core/test/e2e-frontend/preview-routes.test.js +++ b/ghost/core/test/e2e-frontend/preview-routes.test.js @@ -155,10 +155,14 @@ describe('Frontend Routing: Preview Routes', function () { }); it('should render scheduled email-only posts', async function () { + const newsletters = await testUtils.fixtures.insertNewsletters(); + const newsletterId = newsletters[0].id; + const scheduledEmail = await testUtils.fixtures.insertPosts([{ title: 'test newsletter', status: 'scheduled', published_at: DateTime.now().plus({days: 1}).toISODate(), + newsletter_id: newsletterId, posts_meta: { email_only: true } From 562fc2786bbb13474fd26569e480044e15761003 Mon Sep 17 00:00:00 2001 From: Steve Larson <9larsons@gmail.com> Date: Wed, 22 Apr 2026 14:13:54 -0500 Subject: [PATCH 2/4] Bumped @tryghost test-helper packages to v2.1.0 (#27514) no ref Bumps the three `@tryghost/*` test-helper packages from their pre-1.0 versions up to `2.1.0`, the current releases from the TryGhost/Framework monorepo. --- e2e/tests/admin/reset-password.test.ts | 3 + ghost/core/package.json | 6 +- .../__snapshots__/activity-feed.test.js.snap | 2 +- .../__snapshots__/authentication.test.js.snap | 2 +- .../automated-email-design.test.js.snap | 2 +- .../automated-emails.test.js.snap | 2 +- .../admin/__snapshots__/backup.test.js.snap | 2 +- .../admin/__snapshots__/comments.test.js.snap | 2 +- .../admin/__snapshots__/config.test.js.snap | 2 +- .../custom-theme-settings.test.js.snap | 2 +- .../admin/__snapshots__/db.test.js.snap | 2 +- .../__snapshots__/email-previews.test.js.snap | 2 +- .../admin/__snapshots__/emails.test.js.snap | 2 +- .../admin/__snapshots__/explore.test.js.snap | 2 +- .../admin/__snapshots__/images.test.js.snap | 2 +- .../__snapshots__/integrations.test.js.snap | 2 +- .../admin/__snapshots__/labels.test.js.snap | 2 +- .../admin/__snapshots__/links.test.js.snap | 2 +- .../member-commenting.test.js.snap | 2 +- .../members-edit-subscriptions.test.js.snap | 2 +- .../members-exporter.test.js.snap | 2 +- .../members-newsletters.test.js.snap | 2 +- .../members-stripe-connect.test.js.snap | 2 +- .../admin/__snapshots__/members.test.js.snap | 2 +- .../admin/__snapshots__/mentions.test.js.snap | 2 +- .../__snapshots__/newsletters.test.js.snap | 2 +- .../__snapshots__/notifications.test.js.snap | 2 +- .../admin/__snapshots__/offers.test.js.snap | 2 +- .../__snapshots__/pages-bulk.test.js.snap | 2 +- .../admin/__snapshots__/pages.test.js.snap | 2 +- .../post-analytics-export.test.js.snap | 2 +- .../__snapshots__/posts-bulk.test.js.snap | 2 +- .../admin/__snapshots__/posts.test.js.snap | 2 +- .../__snapshots__/rate-limiting.test.js.snap | 2 +- .../recommendations.test.js.snap | 2 +- .../admin/__snapshots__/roles.test.js.snap | 2 +- .../__snapshots__/search-index.test.js.snap | 2 +- .../admin/__snapshots__/session.test.js.snap | 2 +- .../__snapshots__/settings-files.test.js.snap | 2 +- .../admin/__snapshots__/settings.test.js.snap | 2 +- .../admin/__snapshots__/site.test.js.snap | 2 +- .../admin/__snapshots__/slack.test.js.snap | 2 +- .../admin/__snapshots__/slugs.test.js.snap | 2 +- .../admin/__snapshots__/snippets.test.js.snap | 2 +- .../admin/__snapshots__/sso.test.js.snap | 2 +- .../admin/__snapshots__/stats.test.js.snap | 2 +- .../admin/__snapshots__/tiers.test.js.snap | 2 +- .../admin/__snapshots__/users.test.js.snap | 2 +- .../admin/__snapshots__/webhooks.test.js.snap | 2 +- .../__snapshots__/authors.test.js.snap | 2 +- .../__snapshots__/newsletters.test.js.snap | 2 +- .../content/__snapshots__/offers.test.js.snap | 2 +- .../content/__snapshots__/pages.test.js.snap | 2 +- .../content/__snapshots__/posts.test.js.snap | 2 +- .../recommendations.test.js.snap | 2 +- .../__snapshots__/search-index.test.js.snap | 2 +- .../__snapshots__/settings.test.js.snap | 2 +- .../content/__snapshots__/tiers.test.js.snap | 2 +- .../__snapshots__/comments.test.js.snap | 2 +- .../__snapshots__/announcement.test.js.snap | 2 +- ...reate-stripe-checkout-session.test.js.snap | 2 +- .../donation-checkout-session.test.js.snap | 2 +- .../__snapshots__/feedback.test.js.snap | 2 +- .../gift-subscriptions.test.js.snap | 2 +- .../__snapshots__/middleware.test.js.snap | 2 +- .../recommendations.test.js.snap | 2 +- .../send-magic-link.test.js.snap | 2 +- .../members/__snapshots__/site.test.js.snap | 2 +- .../__snapshots__/webhooks.test.js.snap | 2 +- .../__snapshots__/well-known.test.js.snap | 2 +- .../1-options-requests.test.js.snap | 2 +- .../__snapshots__/click-tracking.test.js.snap | 2 +- .../__snapshots__/well-known.test.js.snap | 2 +- .../recommendation-emails.test.js.snap | 2 +- .../__snapshots__/members.test.js.snap | 2 +- .../__snapshots__/pages.test.js.snap | 2 +- .../__snapshots__/posts.test.js.snap | 2 +- .../__snapshots__/site.test.js.snap | 2 +- .../__snapshots__/tags.test.js.snap | 2 +- ...ember-welcome-emails-snapshot.test.js.snap | 2 +- .../__snapshots__/cards.test.js.snap | 2 +- .../__snapshots__/authentication.test.js.snap | 5 +- .../legacy/api/admin/authentication.test.js | 7 +- .../__snapshots__/ghost-head.test.js.snap | 2 +- .../settings-bread-service.test.js.snap | 2 +- pnpm-lock.yaml | 465 +++++++++--------- 86 files changed, 326 insertions(+), 322 deletions(-) diff --git a/e2e/tests/admin/reset-password.test.ts b/e2e/tests/admin/reset-password.test.ts index 081a17b44ef..0ede8ed53c6 100644 --- a/e2e/tests/admin/reset-password.test.ts +++ b/e2e/tests/admin/reset-password.test.ts @@ -31,6 +31,9 @@ test.describe('Ghost Admin - Reset Password', () => { const analyticsPage = new AnalyticsOverviewPage(page); await expect(analyticsPage.header).toBeVisible(); + + const cookies = await page.context().cookies(); + expect(cookies.find(({name}) => name === 'ghost-admin-api-session')).toBeDefined(); }); test('resets account owner password when 2FA enabled', async ({page, ghostAccountOwner}) => { diff --git a/ghost/core/package.json b/ghost/core/package.json index 25540d5acce..f0d89b555eb 100644 --- a/ghost/core/package.json +++ b/ghost/core/package.json @@ -99,7 +99,7 @@ "@tryghost/database-info": "0.3.35", "@tryghost/debug": "0.1.40", "@tryghost/domain-events": "1.0.8", - "@tryghost/email-mock-receiver": "0.3.16", + "@tryghost/email-mock-receiver": "2.1.0", "@tryghost/errors": "1.3.13", "@tryghost/helpers": "1.1.103", "@tryghost/html-to-plaintext": "1.0.8", @@ -252,8 +252,8 @@ "devDependencies": { "@actions/core": "3.0.0", "@prettier/sync": "0.6.1", - "@tryghost/express-test": "0.15.5", - "@tryghost/webhook-mock-receiver": "0.2.22", + "@tryghost/express-test": "2.1.0", + "@tryghost/webhook-mock-receiver": "2.1.0", "@types/bookshelf": "1.2.9", "@types/common-tags": "1.8.4", "@types/express": "4.17.25", diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/activity-feed.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/activity-feed.test.js.snap index b9f56e6a9a0..be9535b728b 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/activity-feed.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/activity-feed.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Activity Feed API Can do filter based pagination for aggregated clicks for all posts 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/authentication.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/authentication.test.js.snap index 9024caf8cff..cd472891c17 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/authentication.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/authentication.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Authentication API generateResetToken Cannot generate reset token without required info 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/automated-email-design.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/automated-email-design.test.js.snap index 6a953e5909d..8fe99f3dea3 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/automated-email-design.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/automated-email-design.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Automated Email Design API Edit Can edit the automated email design 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/automated-emails.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/automated-emails.test.js.snap index 605c779cb57..bd5968de448 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/automated-emails.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/automated-emails.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Automated Emails API Add Can add an automated email 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/backup.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/backup.test.js.snap index 047b416fa47..a3b072a6151 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/backup.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/backup.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Backup Integration Backup API Backup Integration Can create a DB backup 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/comments.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/comments.test.js.snap index f709bcc4534..e66d668d1e7 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/comments.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/comments.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Admin Comments API API Key Permissions API key without comment permissions cannot browse comments 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/config.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/config.test.js.snap index b3d0d8a7683..1718bad46e6 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/config.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/config.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Config API As Owner Can retrieve config and all expected properties 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/custom-theme-settings.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/custom-theme-settings.test.js.snap index 8b6b1832189..fb8528f5b96 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/custom-theme-settings.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/custom-theme-settings.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Custom Theme Settings API Browse can fetch settings for current theme 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/db.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/db.test.js.snap index 479b90b6919..47615c8ba54 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/db.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/db.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`DB API Can delete all content 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/email-previews.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/email-previews.test.js.snap index a25680914ac..3b9e40fde4d 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/email-previews.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/email-previews.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Email Preview API As Admin can send test email 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/emails.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/emails.test.js.snap index 87089da10a4..757d969fc6a 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/emails.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/emails.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Emails API Can browse all email failures 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/explore.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/explore.test.js.snap index 1c4a6681cc6..38f040d023a 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/explore.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/explore.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Explore API Read Can request Explore data 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/images.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/images.test.js.snap index e0dbff30104..8e13619a172 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/images.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/images.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Images API Can not upload a file without extension 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/integrations.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/integrations.test.js.snap index f72997f12f2..75bcd77922a 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/integrations.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/integrations.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Integrations API As Administrator Can't see Self-Serve or any other integration 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/labels.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/labels.test.js.snap index 96a3faa5d8c..0849e0f793b 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/labels.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/labels.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Labels API Can add 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/links.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/links.test.js.snap index 0b6fa5e364a..b59fefb3d47 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/links.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/links.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Links API Can browse all links 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/member-commenting.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/member-commenting.test.js.snap index 68baa7df0ce..d3304fcbe95 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/member-commenting.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/member-commenting.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Member Commenting API POST /members/:id/commenting/disable Can disable commenting and hide comments with hide_comments: true 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/members-edit-subscriptions.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/members-edit-subscriptions.test.js.snap index e4476dace7e..4a30261aed5 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/members-edit-subscriptions.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/members-edit-subscriptions.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Members API: edit subscriptions Can cancel a subscription 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/members-exporter.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/members-exporter.test.js.snap index 151681ad317..4451555c770 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/members-exporter.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/members-exporter.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Members API — exportCSV Can export a member without tiers 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/members-newsletters.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/members-newsletters.test.js.snap index e2422cec74d..3c5d91431b4 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/members-newsletters.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/members-newsletters.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Members API - With Newsletters - compat mode Can fetch members who are NOT subscribed 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/members-stripe-connect.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/members-stripe-connect.test.js.snap index 9ff8e00648d..c5ebd00d0dc 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/members-stripe-connect.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/members-stripe-connect.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Members Stripe Connect API can do auth 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/members.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/members.test.js.snap index fb43a337fb4..b516286a36a 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/members.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/members.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Members API - member attribution Can read member attributed to a page 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/mentions.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/mentions.test.js.snap index afa69aebcfb..e824b5602b3 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/mentions.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/mentions.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Mentions API Can browse with limits 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/newsletters.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/newsletters.test.js.snap index 938f83ca2aa..1c8a2396859 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/newsletters.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/newsletters.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Newsletters API Can add a newsletter - and subscribe existing members 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/notifications.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/notifications.test.js.snap index 9d2055d6581..5bbbf8a9ba8 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/notifications.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/notifications.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Notifications API As Author Read notifications 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/offers.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/offers.test.js.snap index 6afb209dd1e..b9521b58205 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/offers.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/offers.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Offers API Can add a fixed offer 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/pages-bulk.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/pages-bulk.test.js.snap index 2b5bb431285..a1b5281c48c 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/pages-bulk.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/pages-bulk.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Pages Bulk API Delete Can delete all pages 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/pages.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/pages.test.js.snap index ec2b5bc9b86..be936d9b8d9 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/pages.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/pages.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Pages API Browse Re-renders html when null 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/post-analytics-export.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/post-analytics-export.test.js.snap index 294fac08158..2865d3784df 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/post-analytics-export.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/post-analytics-export.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Post Analytics Export Default settings (all features enabled) Exports CSV with full analytics data 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/posts-bulk.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/posts-bulk.test.js.snap index abe9d7df6cc..dfbe695a723 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/posts-bulk.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/posts-bulk.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Posts Bulk API Delete Can delete all posts 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/posts.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/posts.test.js.snap index 3519db32e76..d81d6244385 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/posts.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/posts.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Posts API Can browse 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/rate-limiting.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/rate-limiting.test.js.snap index 1453dce177c..fb55ad2332a 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/rate-limiting.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/rate-limiting.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Sessions API Is rate limited to protect against brute forcing a users password 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/recommendations.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/recommendations.test.js.snap index ed337e98494..ae3d61e1a73 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/recommendations.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/recommendations.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Recommendations Admin API Can add a full recommendation 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/roles.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/roles.test.js.snap index 9eed67408fe..d4f0c516781 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/roles.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/roles.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Roles API Can request all roles 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/search-index.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/search-index.test.js.snap index 695317a37bc..1be331c471a 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/search-index.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/search-index.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Search Index API fetchPages should return a list of pages 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/session.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/session.test.js.snap index 12291a6504c..42e0239e621 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/session.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/session.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Sessions API Staff 2FA can verify a session with 2FA code 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/settings-files.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/settings-files.test.js.snap index 016c94a5430..0507afdee49 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/settings-files.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/settings-files.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Settings File API Can download routes.yaml 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/settings.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/settings.test.js.snap index 62927bea122..85d072dc1d8 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/settings.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/settings.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Settings API Browse Can request all settings 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/site.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/site.test.js.snap index 97dabb8dd6d..486af795870 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/site.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/site.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Site API can retrieve config and all expected properties 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/slack.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/slack.test.js.snap index 71b07aa9fd7..1f48ca5f025 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/slack.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/slack.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Slack API Can post slack test 1: [body] 1`] = `Object {}`; diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/slugs.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/slugs.test.js.snap index ab9a7ca7e07..12c7d29dbb5 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/slugs.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/slugs.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Slug API Can generate a slug 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/snippets.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/snippets.test.js.snap index 467b7149065..a277d1b46e8 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/snippets.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/snippets.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Snippets API Can add 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/sso.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/sso.test.js.snap index b3b92ea8de6..08da6a1a99e 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/sso.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/sso.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`SSO API SSO with 2FA enabled can sign in with SSO when 2FA is enabled 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/stats.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/stats.test.js.snap index ecd76e984d0..035416eb8df 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/stats.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/stats.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Stats API Can fetch MRR history 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/tiers.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/tiers.test.js.snap index c1c181f31a0..eb91743e41a 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/tiers.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/tiers.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Tiers API Can browse Tiers 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/users.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/users.test.js.snap index e3225ab9e40..7d9d20a9d78 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/users.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/users.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`User API Can change password and retain the session 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/admin/__snapshots__/webhooks.test.js.snap b/ghost/core/test/e2e-api/admin/__snapshots__/webhooks.test.js.snap index 3571f929387..5d82bde9c3a 100644 --- a/ghost/core/test/e2e-api/admin/__snapshots__/webhooks.test.js.snap +++ b/ghost/core/test/e2e-api/admin/__snapshots__/webhooks.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Webhooks API Can create a webhook 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/authors.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/authors.test.js.snap index 59d176e60b1..91dd2977a15 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/authors.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/authors.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Authors Content API Can request author by id including post count 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/newsletters.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/newsletters.test.js.snap index 87bb490fb5f..e7e7e70e154 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/newsletters.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/newsletters.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Newsletters Content API Can request only active newsletters 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/offers.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/offers.test.js.snap index 4946395977b..4e57dd0adbb 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/offers.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/offers.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Offers Content API Can read offer details from id 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/pages.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/pages.test.js.snap index 91bf10e8f98..b5f8d0eb6be 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/pages.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/pages.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Pages Content API Can request page 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/posts.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/posts.test.js.snap index 15157426bfb..a25dfb0fc70 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/posts.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/posts.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Posts Content API Can browse filtering by collection 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/recommendations.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/recommendations.test.js.snap index 4f4adfe5638..2c54a0d3d25 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/recommendations.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/recommendations.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Recommendations Content API Can paginate recommendations 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/search-index.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/search-index.test.js.snap index 27839189e3e..e8779d3767b 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/search-index.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/search-index.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Search Index Content API fetchAuthors should return a list of authors 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/settings.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/settings.test.js.snap index 9b23174609c..e91b36644e7 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/settings.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/settings.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Settings Content API Can request settings 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/content/__snapshots__/tiers.test.js.snap b/ghost/core/test/e2e-api/content/__snapshots__/tiers.test.js.snap index c99ce758e8a..9903d8d8464 100644 --- a/ghost/core/test/e2e-api/content/__snapshots__/tiers.test.js.snap +++ b/ghost/core/test/e2e-api/content/__snapshots__/tiers.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Tiers Content API Can filter on visibility 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members-comments/__snapshots__/comments.test.js.snap b/ghost/core/test/e2e-api/members-comments/__snapshots__/comments.test.js.snap index 39d87c0fbed..d72b5ea263e 100644 --- a/ghost/core/test/e2e-api/members-comments/__snapshots__/comments.test.js.snap +++ b/ghost/core/test/e2e-api/members-comments/__snapshots__/comments.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Comments API Tier-only posts Members with access Can comment on a post 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/announcement.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/announcement.test.js.snap index 14462ab9ebd..c85c616c3e6 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/announcement.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/announcement.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Announcement Can read announcement data 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/create-stripe-checkout-session.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/create-stripe-checkout-session.test.js.snap index d53cdd86605..719328eb5ed 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/create-stripe-checkout-session.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/create-stripe-checkout-session.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Create Stripe Checkout Session Can create a checkout session when using offers 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/donation-checkout-session.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/donation-checkout-session.test.js.snap index b63d93ed1a3..fbfab784b5d 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/donation-checkout-session.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/donation-checkout-session.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Create Stripe Checkout Session for Donations Can create a checkout session with a personal note included 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/feedback.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/feedback.test.js.snap index 38395d740da..f96e2860783 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/feedback.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/feedback.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Members Feedback Authentication Allows authentication via session 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/gift-subscriptions.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/gift-subscriptions.test.js.snap index 83481aa4e4e..7b4648f06d8 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/gift-subscriptions.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/gift-subscriptions.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Gift Subscriptions Purchase Can purchase a gift as an anonymous visitor 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/middleware.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/middleware.test.js.snap index d6c911b5e7b..0b1626e2132 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/middleware.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/middleware.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Comments API when authenticated can get member data 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/recommendations.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/recommendations.test.js.snap index 681175ffbe4..fefbf037800 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/recommendations.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/recommendations.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Recommendation Event Tracking Authenticated Can track clicks 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/send-magic-link.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/send-magic-link.test.js.snap index cb45199e89a..d6ededfd88a 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/send-magic-link.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/send-magic-link.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`sendMagicLink OTC Rate limiting Will rate limit OTC verification enumeration (IP-based) 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/site.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/site.test.js.snap index bf4647f1711..fcc7ecb7e8e 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/site.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/site.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Site Public Settings Can retrieve site pubic config 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/webhooks.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/webhooks.test.js.snap index f84cf035180..88326c99a72 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/webhooks.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/webhooks.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Members API Member attribution Creates a SubscriptionCreatedEvent with UTM parameters 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-api/members/__snapshots__/well-known.test.js.snap b/ghost/core/test/e2e-api/members/__snapshots__/well-known.test.js.snap index 771b068ef63..9c89cd597c6 100644 --- a/ghost/core/test/e2e-api/members/__snapshots__/well-known.test.js.snap +++ b/ghost/core/test/e2e-api/members/__snapshots__/well-known.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Members .well-known GET /jwks.json should return a JWKS 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-server/__snapshots__/1-options-requests.test.js.snap b/ghost/core/test/e2e-server/__snapshots__/1-options-requests.test.js.snap index 5b8807662a0..6cb248f6c74 100644 --- a/ghost/core/test/e2e-server/__snapshots__/1-options-requests.test.js.snap +++ b/ghost/core/test/e2e-server/__snapshots__/1-options-requests.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`OPTIONS requests CORS headers in Admin API Handles cross-domain origin header request 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-server/__snapshots__/click-tracking.test.js.snap b/ghost/core/test/e2e-server/__snapshots__/click-tracking.test.js.snap index c346b9078b7..3f10e814795 100644 --- a/ghost/core/test/e2e-server/__snapshots__/click-tracking.test.js.snap +++ b/ghost/core/test/e2e-server/__snapshots__/click-tracking.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Click Tracking Full test 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-server/__snapshots__/well-known.test.js.snap b/ghost/core/test/e2e-server/__snapshots__/well-known.test.js.snap index 99ba33dc698..1902406336f 100644 --- a/ghost/core/test/e2e-server/__snapshots__/well-known.test.js.snap +++ b/ghost/core/test/e2e-server/__snapshots__/well-known.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`.well-known GET /jwks.json should return a JWKS 1: [body] 1`] = ` Object { diff --git a/ghost/core/test/e2e-server/services/__snapshots__/recommendation-emails.test.js.snap b/ghost/core/test/e2e-server/services/__snapshots__/recommendation-emails.test.js.snap index 04ee238a268..89c8d4fca71 100644 --- a/ghost/core/test/e2e-server/services/__snapshots__/recommendation-emails.test.js.snap +++ b/ghost/core/test/e2e-server/services/__snapshots__/recommendation-emails.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Incoming Recommendation Emails Sends a different email if we receive a recommendation back 1: [html 1] 1`] = ` " diff --git a/ghost/core/test/e2e-webhooks/__snapshots__/members.test.js.snap b/ghost/core/test/e2e-webhooks/__snapshots__/members.test.js.snap index 296da0d793b..235521a5f0c 100644 --- a/ghost/core/test/e2e-webhooks/__snapshots__/members.test.js.snap +++ b/ghost/core/test/e2e-webhooks/__snapshots__/members.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`member.* events member.added event is triggered 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-webhooks/__snapshots__/pages.test.js.snap b/ghost/core/test/e2e-webhooks/__snapshots__/pages.test.js.snap index b05c675e2fc..b2fc09be7a7 100644 --- a/ghost/core/test/e2e-webhooks/__snapshots__/pages.test.js.snap +++ b/ghost/core/test/e2e-webhooks/__snapshots__/pages.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`page.* events page.added event is triggered 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-webhooks/__snapshots__/posts.test.js.snap b/ghost/core/test/e2e-webhooks/__snapshots__/posts.test.js.snap index f2be88c38c3..df09e88bf63 100644 --- a/ghost/core/test/e2e-webhooks/__snapshots__/posts.test.js.snap +++ b/ghost/core/test/e2e-webhooks/__snapshots__/posts.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`post.* events post.added event is triggered 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-webhooks/__snapshots__/site.test.js.snap b/ghost/core/test/e2e-webhooks/__snapshots__/site.test.js.snap index c5349d9991e..08b08beb753 100644 --- a/ghost/core/test/e2e-webhooks/__snapshots__/site.test.js.snap +++ b/ghost/core/test/e2e-webhooks/__snapshots__/site.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`site.* events site.changed event is triggered 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/e2e-webhooks/__snapshots__/tags.test.js.snap b/ghost/core/test/e2e-webhooks/__snapshots__/tags.test.js.snap index ce95add35f2..d411f5f8012 100644 --- a/ghost/core/test/e2e-webhooks/__snapshots__/tags.test.js.snap +++ b/ghost/core/test/e2e-webhooks/__snapshots__/tags.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`tag.* events tag.added event is triggered 1: [headers] 1`] = ` Object { diff --git a/ghost/core/test/integration/services/__snapshots__/member-welcome-emails-snapshot.test.js.snap b/ghost/core/test/integration/services/__snapshots__/member-welcome-emails-snapshot.test.js.snap index 8b454774f90..cc2d8b33495 100644 --- a/ghost/core/test/integration/services/__snapshots__/member-welcome-emails-snapshot.test.js.snap +++ b/ghost/core/test/integration/services/__snapshots__/member-welcome-emails-snapshot.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Member Welcome Email Renderer Snapshots renders a simple paragraph welcome email 1 1`] = ` Object { diff --git a/ghost/core/test/integration/services/email-service/__snapshots__/cards.test.js.snap b/ghost/core/test/integration/services/email-service/__snapshots__/cards.test.js.snap index 06ce17c79b1..38b40a1a689 100644 --- a/ghost/core/test/integration/services/email-service/__snapshots__/cards.test.js.snap +++ b/ghost/core/test/integration/services/email-service/__snapshots__/cards.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Can send cards via email Paragraphs 1 1`] = ` Object { diff --git a/ghost/core/test/legacy/api/admin/__snapshots__/authentication.test.js.snap b/ghost/core/test/legacy/api/admin/__snapshots__/authentication.test.js.snap index b8701974560..462ec139313 100644 --- a/ghost/core/test/legacy/api/admin/__snapshots__/authentication.test.js.snap +++ b/ghost/core/test/legacy/api/admin/__snapshots__/authentication.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`Authentication API Blog setup complete setup 1: [body] 1`] = ` Object { @@ -798,6 +798,9 @@ Object { "content-type": "application/json; charset=utf-8", "content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/, "etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/, + "set-cookie": Array [ + StringMatching /\\^ghost-admin-api-session=/, + ], "vary": "Accept-Version, Origin, Accept-Encoding", "x-powered-by": "Express", } diff --git a/ghost/core/test/legacy/api/admin/authentication.test.js b/ghost/core/test/legacy/api/admin/authentication.test.js index 67225ff351a..ce460217543 100644 --- a/ghost/core/test/legacy/api/admin/authentication.test.js +++ b/ghost/core/test/legacy/api/admin/authentication.test.js @@ -1,7 +1,7 @@ const nock = require('nock'); const assert = require('node:assert/strict'); const {agentProvider, mockManager, fixtureManager, matchers} = require('../../../utils/e2e-framework'); -const {anyContentVersion, anyEtag, anyISODateTime, anyErrorId} = matchers; +const {anyContentVersion, anyEtag, anyISODateTime, anyErrorId, stringMatching} = matchers; const {tokens} = require('@tryghost/security'); const models = require('../../../../core/server/models'); @@ -427,7 +427,10 @@ describe('Authentication API', function () { }) .matchHeaderSnapshot({ 'content-version': anyContentVersion, - etag: anyEtag + etag: anyEtag, + 'set-cookie': [ + stringMatching(/^ghost-admin-api-session=/) + ] }); }); diff --git a/ghost/core/test/unit/frontend/helpers/__snapshots__/ghost-head.test.js.snap b/ghost/core/test/unit/frontend/helpers/__snapshots__/ghost-head.test.js.snap index f4d0c427d00..66c80873177 100644 --- a/ghost/core/test/unit/frontend/helpers/__snapshots__/ghost-head.test.js.snap +++ b/ghost/core/test/unit/frontend/helpers/__snapshots__/ghost-head.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`{{ghost_head}} helper accent_color attaches style tag to existing script/style tag 1 1`] = ` Object { diff --git a/ghost/core/test/unit/server/services/settings/__snapshots__/settings-bread-service.test.js.snap b/ghost/core/test/unit/server/services/settings/__snapshots__/settings-bread-service.test.js.snap index 424a55a6e1d..a15ac3f29c5 100644 --- a/ghost/core/test/unit/server/services/settings/__snapshots__/settings-bread-service.test.js.snap +++ b/ghost/core/test/unit/server/services/settings/__snapshots__/settings-bread-service.test.js.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing exports[`UNIT > Settings BREAD Service: edit setting members_support_address triggers email verification 1: [html 1] 1`] = ` " diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20dc627cf31..1f7c0cf9243 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -164,7 +164,7 @@ importers: version: 4.2.2 ts-jest: specifier: 29.4.9 - version: 29.4.9(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@29.7.0)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.9(@babel/core@7.29.0)(@jest/transform@30.3.0)(@jest/types@30.3.0)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.3.0)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3) vite: specifier: 5.4.21 version: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.31.1)(terser@5.46.1) @@ -2018,8 +2018,8 @@ importers: specifier: 1.0.8 version: 1.0.8 '@tryghost/email-mock-receiver': - specifier: 0.3.16 - version: 0.3.16 + specifier: 2.1.0 + version: 2.1.0 '@tryghost/errors': specifier: ^1.3.7 version: 1.3.13 @@ -2451,11 +2451,11 @@ importers: specifier: 0.6.1 version: 0.6.1(prettier@2.8.8) '@tryghost/express-test': - specifier: 0.15.5 - version: 0.15.5 + specifier: 2.1.0 + version: 2.1.0(express@4.21.2) '@tryghost/webhook-mock-receiver': - specifier: 0.2.22 - version: 0.2.22 + specifier: 2.1.0 + version: 2.1.0 '@types/bookshelf': specifier: 1.2.9 version: 1.2.9(mysql2@3.18.1(@types/node@22.19.17))(sqlite3@5.1.7) @@ -5323,22 +5323,22 @@ packages: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/expect-utils@28.1.3': - resolution: {integrity: sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - '@jest/expect-utils@29.7.0': resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/expect@28.1.3': - resolution: {integrity: sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + '@jest/expect-utils@30.3.0': + resolution: {integrity: sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/expect@29.7.0': resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect@30.3.0': + resolution: {integrity: sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/fake-timers@29.7.0': resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5351,6 +5351,10 @@ packages: resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/pattern@30.0.1': + resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/reporters@29.7.0': resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5360,10 +5364,6 @@ packages: node-notifier: optional: true - '@jest/schemas@28.1.3': - resolution: {integrity: sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - '@jest/schemas@29.6.3': resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5372,6 +5372,10 @@ packages: resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/snapshot-utils@30.3.0': + resolution: {integrity: sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/source-map@29.6.3': resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5384,22 +5388,22 @@ packages: resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/transform@28.1.3': - resolution: {integrity: sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - '@jest/transform@29.7.0': resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/types@28.1.3': - resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + '@jest/transform@30.3.0': + resolution: {integrity: sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} '@jest/types@29.6.3': resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/types@30.3.0': + resolution: {integrity: sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0': resolution: {integrity: sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==} peerDependencies: @@ -7170,9 +7174,6 @@ packages: '@simple-dom/void-map@1.4.0': resolution: {integrity: sha512-VDhLEyVCbuhOBBgHol9ShzIv9O8UCzdXeH4FoXu2DOcu/nnvTjLTck+BgXsCLv5ynDiUdoqsREEVFnoyPpFKVw==} - '@sinclair/typebox@0.24.51': - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - '@sinclair/typebox@0.27.10': resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} @@ -9152,8 +9153,8 @@ packages: '@tryghost/elasticsearch@3.0.29': resolution: {integrity: sha512-WGfoGbPXzX7SYPKeD7naYyoF8Lc7KruQPixFSJGLciRQ3wkrZQANQIguD4nA71upp0dhsT4D4aWP296VfJxuPw==} - '@tryghost/email-mock-receiver@0.3.16': - resolution: {integrity: sha512-C72ZeaZa4eCZ4JSIY3BW4UhfBo34UA2O2+jEO7UMCsMT5AAIstv3oQgtj/kLZraFDaNtMOXdsUJA+gQDUTzBOA==} + '@tryghost/email-mock-receiver@2.1.0': + resolution: {integrity: sha512-bgEVM5eRnN53rnqWJ8ZkjuGCzMwwt5Ch29TTXRp3qSGTJruUW44DtN/mjB36DDti0hq4unJV9+D1qIIKxdbong==} '@tryghost/ember-promise-modals@2.0.1': resolution: {integrity: sha512-py/Fi3jbr+UiUped74m2VRhNEJQrFSgPEhQu/FSHkPjUPWruIokwJoO4TDedklGcMJ+0RKr3YiigcuMFxXjf7A==} @@ -9162,8 +9163,10 @@ packages: '@tryghost/errors@1.3.13': resolution: {integrity: sha512-sXFcuU8Nn3mDcVrLBLFThQZImn+T2w7v/jJGJzdFnSKJstqxd1LyTRlMjpCpgCnqAgHFCaP+uFg7x4CX64VBJQ==} - '@tryghost/express-test@0.15.5': - resolution: {integrity: sha512-a50AsvAjqMBP4UfEF+/2+ljPQ/oMA0rHSeoCk8Wwepp9P13Q+3Vl1mK5OjOfoBduhMYa/3kU+ABHeRrUqoiMxw==} + '@tryghost/express-test@2.1.0': + resolution: {integrity: sha512-gY2AeFzBLvDtDCdc5rE54crDeEC9TzVboViUTmP1Vwbt35BA3O177Ox2j6vb/LQ9HCQ1tp3DOa0hbNYZFaaJAQ==} + peerDependencies: + express: ^4.0.0 || ^5.0.0 '@tryghost/helpers@1.1.103': resolution: {integrity: sha512-ako7nvUKySOaTMSZXUXnrg6pVTkxW1ZVKbJj0t0HGG+ndt0pjLBdnzdZW3BMGEj4Qvf0MWxGdUcLrW/OFyHzsg==} @@ -9183,8 +9186,8 @@ packages: '@tryghost/image-transform@1.4.13': resolution: {integrity: sha512-HkIXzNkNVPteAsucNcCpdLtsQr7332RufOgFyubb1hRkrj90swt5QWmAYCJX/HN1cb7mZr+xImqPwYNmsQ18jA==} - '@tryghost/jest-snapshot@0.5.23': - resolution: {integrity: sha512-rhAkxKKlY2NB2+CGdXjY+aAsWA3xrZiR3yfTK+gnTRstuSR9bq8AU26oxE0L0zNCw0myTVF0WiyElCZ+e/4Gvw==} + '@tryghost/jest-snapshot@2.1.0': + resolution: {integrity: sha512-oOi91KgOVnHzMgFTM6yEBA2jjpVBx0tbE1HJYmmoQ6UYt0rB7giUg1fMFcEvbfXu2DAng1mYKQysrf8EJfHslQ==} '@tryghost/job-manager@1.0.9': resolution: {integrity: sha512-Wlwr1R8oeU6HLB7RB1g6VxAH6VEZIaXTVV2GdvCbipK+TA0MIo6YOQUgrIky25RpyRqKXR0UuDIfXDB4+S+GgQ==} @@ -9351,8 +9354,8 @@ packages: '@tryghost/version@0.1.38': resolution: {integrity: sha512-kVaM7eijFRrBLZLDbmiFxHQ/shmAg5UQ9yM4s9GZN4M3OWY34UHNmjoSOniOHnA5E8fYNA8A3IFmS3FW910xYg==} - '@tryghost/webhook-mock-receiver@0.2.22': - resolution: {integrity: sha512-QthCC6nmXlDKzuhZkzdZOatpgbJlGcJS6Et7BMfHJ6z/56QA21iCC1nRyLa5oCbh21kXtWZpGvX/heRgu2g07Q==} + '@tryghost/webhook-mock-receiver@2.1.0': + resolution: {integrity: sha512-Cka5SW4igfgbGv33fFyEjkgt1HCA3lNhKCL88ThsDCw3/9ROxKQLcHMB+S7SNcewIDfsS5kI2INHtD+1Tbp/BA==} '@tryghost/zip@1.1.54': resolution: {integrity: sha512-6JpuYYlNytFkWTgpZnbkkoH5rqd9FIHfY0ekNNHWZFBS32D6o6bwV4v2wqFmsd0GzMG/CxaHfxfGU+HfTVTJjw==} @@ -9640,9 +9643,6 @@ packages: '@types/pg@8.15.6': resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} - '@types/prettier@2.7.3': - resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} - '@types/pretty-hrtime@1.0.3': resolution: {integrity: sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==} @@ -10839,6 +10839,10 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} + babel-plugin-istanbul@7.0.1: + resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} + engines: {node: '>=12'} + babel-plugin-jest-hoist@29.6.3: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -11840,6 +11844,10 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + cipher-base@1.0.7: resolution: {integrity: sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==} engines: {node: '>= 0.10'} @@ -13271,10 +13279,6 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - diff-sequences@28.1.1: - resolution: {integrity: sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -14533,14 +14537,14 @@ packages: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} - expect@28.1.3: - resolution: {integrity: sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + expect@30.3.0: + resolution: {integrity: sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} @@ -16452,10 +16456,6 @@ packages: ts-node: optional: true - jest-diff@28.1.3: - resolution: {integrity: sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-diff@29.7.0: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16486,46 +16486,46 @@ packages: jest: optional: true - jest-get-type@28.0.2: - resolution: {integrity: sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-haste-map@28.1.3: - resolution: {integrity: sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-haste-map@29.7.0: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-haste-map@30.3.0: + resolution: {integrity: sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-leak-detector@29.7.0: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-matcher-utils@28.1.3: - resolution: {integrity: sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-matcher-utils@29.7.0: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@28.1.3: - resolution: {integrity: sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + jest-matcher-utils@30.3.0: + resolution: {integrity: sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@30.3.0: + resolution: {integrity: sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-mock@29.7.0: resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@30.3.0: + resolution: {integrity: sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-pnp-resolver@1.2.3: resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} @@ -16535,14 +16535,14 @@ packages: jest-resolve: optional: true - jest-regex-util@28.0.2: - resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-regex-util@29.6.3: resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-regex-util@30.0.1: + resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-resolve-dependencies@29.7.0: resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16559,22 +16559,22 @@ packages: resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-snapshot@28.1.3: - resolution: {integrity: sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-snapshot@29.7.0: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@28.1.3: - resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + jest-snapshot@30.3.0: + resolution: {integrity: sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@30.3.0: + resolution: {integrity: sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-validate@29.7.0: resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16587,14 +16587,14 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jest-worker@28.1.3: - resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - jest-worker@29.7.0: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-worker@30.3.0: + resolution: {integrity: sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest@29.7.0: resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -18753,6 +18753,10 @@ packages: resolution: {integrity: sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==} engines: {node: '>=8'} + p-wait-for@6.0.0: + resolution: {integrity: sha512-2kKzMtjS8TVcpCOU/gr3vZ4K/WIyS1AsEFXFWapM/0lERCdyTbB6ZeuCIp+cL1aeLZfQoMdZFCBTHiK4I9UtOw==} + engines: {node: '>=20'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -19752,10 +19756,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-format@28.1.3: - resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -20455,9 +20455,6 @@ packages: resolution: {integrity: sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==} engines: {node: '>= 10'} - reqresnext@1.7.0: - resolution: {integrity: sha512-TS/B8FKRf7j1oowoAYB1Hv+Ga92Y6vY6NvxVF0fqw11KFdwe+DI6jSWB7XHa1Hf21lRqT6vmwy+6KOkLBF6GkQ==} - request@2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} @@ -26646,20 +26643,13 @@ snapshots: '@types/node': 25.6.0 jest-mock: 29.7.0 - '@jest/expect-utils@28.1.3': - dependencies: - jest-get-type: 28.0.2 - '@jest/expect-utils@29.7.0': dependencies: jest-get-type: 29.6.3 - '@jest/expect@28.1.3': + '@jest/expect-utils@30.3.0': dependencies: - expect: 28.1.3 - jest-snapshot: 28.1.3 - transitivePeerDependencies: - - supports-color + '@jest/get-type': 30.1.0 '@jest/expect@29.7.0': dependencies: @@ -26668,6 +26658,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/expect@30.3.0': + dependencies: + expect: 30.3.0 + jest-snapshot: 30.3.0 + transitivePeerDependencies: + - supports-color + '@jest/fake-timers@29.7.0': dependencies: '@jest/types': 29.6.3 @@ -26688,6 +26685,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/pattern@30.0.1': + dependencies: + '@types/node': 25.6.0 + jest-regex-util: 30.0.1 + '@jest/reporters@29.7.0(node-notifier@10.0.1)': dependencies: '@bcoe/v8-coverage': 0.2.3 @@ -26719,10 +26721,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/schemas@28.1.3': - dependencies: - '@sinclair/typebox': 0.24.51 - '@jest/schemas@29.6.3': dependencies: '@sinclair/typebox': 0.27.10 @@ -26731,6 +26729,13 @@ snapshots: dependencies: '@sinclair/typebox': 0.34.48 + '@jest/snapshot-utils@30.3.0': + dependencies: + '@jest/types': 30.3.0 + chalk: 4.1.2 + graceful-fs: 4.2.11 + natural-compare: 1.4.0 + '@jest/source-map@29.6.3': dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -26751,19 +26756,19 @@ snapshots: jest-haste-map: 29.7.0 slash: 3.0.0 - '@jest/transform@28.1.3': + '@jest/transform@29.7.0': dependencies: '@babel/core': 7.29.0 - '@jest/types': 28.1.3 + '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 - convert-source-map: 1.9.0 + convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 28.1.3 - jest-regex-util: 28.0.2 - jest-util: 28.1.3 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 micromatch: 4.0.8 pirates: 4.0.7 slash: 3.0.0 @@ -26771,38 +26776,38 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/transform@29.7.0': + '@jest/transform@30.3.0': dependencies: '@babel/core': 7.29.0 - '@jest/types': 29.6.3 + '@jest/types': 30.3.0 '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 + babel-plugin-istanbul: 7.0.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 29.7.0 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - micromatch: 4.0.8 + jest-haste-map: 30.3.0 + jest-regex-util: 30.0.1 + jest-util: 30.3.0 pirates: 4.0.7 slash: 3.0.0 - write-file-atomic: 4.0.2 + write-file-atomic: 5.0.1 transitivePeerDependencies: - supports-color - '@jest/types@28.1.3': + '@jest/types@29.6.3': dependencies: - '@jest/schemas': 28.1.3 + '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 25.6.0 '@types/yargs': 17.0.35 chalk: 4.1.2 - '@jest/types@29.6.3': + '@jest/types@30.3.0': dependencies: - '@jest/schemas': 29.6.3 + '@jest/pattern': 30.0.1 + '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 '@types/node': 25.6.0 @@ -28707,8 +28712,6 @@ snapshots: '@simple-dom/void-map@1.4.0': {} - '@sinclair/typebox@0.24.51': {} - '@sinclair/typebox@0.27.10': {} '@sinclair/typebox@0.34.48': {} @@ -31261,7 +31264,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tryghost/email-mock-receiver@0.3.16': {} + '@tryghost/email-mock-receiver@2.1.0': {} '@tryghost/ember-promise-modals@2.0.1(ember-source@3.24.0(@babel/core@7.29.0))(postcss@8.5.6)': dependencies: @@ -31291,13 +31294,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@tryghost/express-test@0.15.5': + '@tryghost/express-test@2.1.0(express@4.21.2)': dependencies: - '@tryghost/jest-snapshot': 0.5.23 + '@tryghost/jest-snapshot': 2.1.0 cookiejar: 2.1.4 + express: 4.21.2 form-data: 4.0.5 mime-types: 3.0.2 - reqresnext: 1.7.0 transitivePeerDependencies: - supports-color @@ -31338,12 +31341,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@tryghost/jest-snapshot@0.5.23': + '@tryghost/jest-snapshot@2.1.0': dependencies: - '@jest/expect': 28.1.3 - '@jest/expect-utils': 28.1.3 + '@jest/expect': 30.3.0 + '@jest/expect-utils': 30.3.0 '@tryghost/errors': 1.3.13 - jest-snapshot: 29.7.0 + jest-snapshot: 30.3.0 transitivePeerDependencies: - supports-color @@ -31760,9 +31763,9 @@ snapshots: '@tryghost/root-utils': 0.3.38 semver: 7.7.4 - '@tryghost/webhook-mock-receiver@0.2.22': + '@tryghost/webhook-mock-receiver@2.1.0': dependencies: - p-wait-for: 3.2.0 + p-wait-for: 6.0.0 '@tryghost/zip@1.1.54': dependencies: @@ -32113,8 +32116,6 @@ snapshots: pg-protocol: 1.13.0 pg-types: 2.2.0 - '@types/prettier@2.7.3': {} - '@types/pretty-hrtime@1.0.3': {} '@types/prop-types@15.7.15': {} @@ -33797,6 +33798,16 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-istanbul@7.0.1: + dependencies: + '@babel/helper-plugin-utils': 7.28.6 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 6.0.3 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.28.6 @@ -35554,6 +35565,8 @@ snapshots: ci-info@3.9.0: {} + ci-info@4.4.0: {} + cipher-base@1.0.7: dependencies: inherits: 2.0.4 @@ -36753,8 +36766,6 @@ snapshots: didyoumean@1.2.2: {} - diff-sequences@28.1.1: {} - diff-sequences@29.6.3: {} diff@1.4.0: {} @@ -39305,14 +39316,6 @@ snapshots: expect-type@1.3.0: {} - expect@28.1.3: - dependencies: - '@jest/expect-utils': 28.1.3 - jest-get-type: 28.0.2 - jest-matcher-utils: 28.1.3 - jest-message-util: 28.1.3 - jest-util: 28.1.3 - expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 @@ -39321,6 +39324,15 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 + expect@30.3.0: + dependencies: + '@jest/expect-utils': 30.3.0 + '@jest/get-type': 30.1.0 + jest-matcher-utils: 30.3.0 + jest-message-util: 30.3.0 + jest-mock: 30.3.0 + jest-util: 30.3.0 + exponential-backoff@3.1.3: {} express-brute@1.0.1(express@4.21.2): @@ -41793,13 +41805,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-diff@28.1.3: - dependencies: - chalk: 4.1.2 - diff-sequences: 28.1.1 - jest-get-type: 28.0.2 - pretty-format: 28.1.3 - jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -41842,38 +41847,35 @@ snapshots: optionalDependencies: jest: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@25.6.0)(typescript@5.9.3)) - jest-get-type@28.0.2: {} - jest-get-type@29.6.3: {} - jest-haste-map@28.1.3: + jest-haste-map@29.7.0: dependencies: - '@jest/types': 28.1.3 + '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 '@types/node': 25.6.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 - jest-regex-util: 28.0.2 - jest-util: 28.1.3 - jest-worker: 28.1.3 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - jest-haste-map@29.7.0: + jest-haste-map@30.3.0: dependencies: - '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.9 + '@jest/types': 30.3.0 '@types/node': 25.6.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 - jest-regex-util: 29.6.3 - jest-util: 29.7.0 - jest-worker: 29.7.0 - micromatch: 4.0.8 + jest-regex-util: 30.0.1 + jest-util: 30.3.0 + jest-worker: 30.3.0 + picomatch: 4.0.4 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 @@ -41883,13 +41885,6 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-matcher-utils@28.1.3: - dependencies: - chalk: 4.1.2 - jest-diff: 28.1.3 - jest-get-type: 28.0.2 - pretty-format: 28.1.3 - jest-matcher-utils@29.7.0: dependencies: chalk: 4.1.2 @@ -41897,27 +41892,34 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-message-util@28.1.3: + jest-matcher-utils@30.3.0: + dependencies: + '@jest/get-type': 30.1.0 + chalk: 4.1.2 + jest-diff: 30.3.0 + pretty-format: 30.3.0 + + jest-message-util@29.7.0: dependencies: '@babel/code-frame': 7.29.0 - '@jest/types': 28.1.3 + '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.8 - pretty-format: 28.1.3 + pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 - jest-message-util@29.7.0: + jest-message-util@30.3.0: dependencies: '@babel/code-frame': 7.29.0 - '@jest/types': 29.6.3 + '@jest/types': 30.3.0 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 29.7.0 + picomatch: 4.0.4 + pretty-format: 30.3.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -41927,14 +41929,20 @@ snapshots: '@types/node': 25.6.0 jest-util: 29.7.0 + jest-mock@30.3.0: + dependencies: + '@jest/types': 30.3.0 + '@types/node': 25.6.0 + jest-util: 30.3.0 + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): optionalDependencies: jest-resolve: 29.7.0 - jest-regex-util@28.0.2: {} - jest-regex-util@29.6.3: {} + jest-regex-util@30.0.1: {} + jest-resolve-dependencies@29.7.0: dependencies: jest-regex-util: 29.6.3 @@ -42007,34 +42015,6 @@ snapshots: transitivePeerDependencies: - supports-color - jest-snapshot@28.1.3: - dependencies: - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jest/expect-utils': 28.1.3 - '@jest/transform': 28.1.3 - '@jest/types': 28.1.3 - '@types/babel__traverse': 7.28.0 - '@types/prettier': 2.7.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) - chalk: 4.1.2 - expect: 28.1.3 - graceful-fs: 4.2.11 - jest-diff: 28.1.3 - jest-get-type: 28.0.2 - jest-haste-map: 28.1.3 - jest-matcher-utils: 28.1.3 - jest-message-util: 28.1.3 - jest-util: 28.1.3 - natural-compare: 1.4.0 - pretty-format: 28.1.3 - semver: 7.7.4 - transitivePeerDependencies: - - supports-color - jest-snapshot@29.7.0: dependencies: '@babel/core': 7.29.0 @@ -42060,14 +42040,31 @@ snapshots: transitivePeerDependencies: - supports-color - jest-util@28.1.3: + jest-snapshot@30.3.0: dependencies: - '@jest/types': 28.1.3 - '@types/node': 25.6.0 + '@babel/core': 7.29.0 + '@babel/generator': 7.29.1 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/types': 7.29.0 + '@jest/expect-utils': 30.3.0 + '@jest/get-type': 30.1.0 + '@jest/snapshot-utils': 30.3.0 + '@jest/transform': 30.3.0 + '@jest/types': 30.3.0 + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.0) chalk: 4.1.2 - ci-info: 3.9.0 + expect: 30.3.0 graceful-fs: 4.2.11 - picomatch: 2.3.2 + jest-diff: 30.3.0 + jest-matcher-utils: 30.3.0 + jest-message-util: 30.3.0 + jest-util: 30.3.0 + pretty-format: 30.3.0 + semver: 7.7.4 + synckit: 0.11.12 + transitivePeerDependencies: + - supports-color jest-util@29.7.0: dependencies: @@ -42078,6 +42075,15 @@ snapshots: graceful-fs: 4.2.11 picomatch: 2.3.2 + jest-util@30.3.0: + dependencies: + '@jest/types': 30.3.0 + '@types/node': 25.6.0 + chalk: 4.1.2 + ci-info: 4.4.0 + graceful-fs: 4.2.11 + picomatch: 4.0.4 + jest-validate@29.7.0: dependencies: '@jest/types': 29.6.3 @@ -42104,16 +42110,18 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@28.1.3: + jest-worker@29.7.0: dependencies: '@types/node': 25.6.0 + jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@29.7.0: + jest-worker@30.3.0: dependencies: '@types/node': 25.6.0 - jest-util: 29.7.0 + '@ungap/structured-clone': 1.3.0 + jest-util: 30.3.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -44848,6 +44856,8 @@ snapshots: dependencies: p-timeout: 3.2.0 + p-wait-for@6.0.0: {} + package-json-from-dist@1.0.1: {} pako@1.0.11: {} @@ -45882,13 +45892,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - pretty-format@28.1.3: - dependencies: - '@jest/schemas': 28.1.3 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 18.3.1 - pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 @@ -46764,14 +46767,6 @@ snapshots: replace-ext@2.0.0: {} - reqresnext@1.7.0: - dependencies: - express: 4.21.2 - lodash: 4.17.23 - setprototypeof: 1.2.0 - transitivePeerDependencies: - - supports-color - request@2.88.2: dependencies: aws-sign2: 0.7.0 @@ -48876,7 +48871,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.4.9(@babel/core@7.29.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@29.7.0)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.9(@babel/core@7.29.0)(@jest/transform@30.3.0)(@jest/types@30.3.0)(babel-jest@29.7.0(@babel/core@7.29.0))(jest-util@30.3.0)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.21)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -48891,10 +48886,10 @@ snapshots: yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.29.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 + '@jest/transform': 30.3.0 + '@jest/types': 30.3.0 babel-jest: 29.7.0(@babel/core@7.29.0) - jest-util: 29.7.0 + jest-util: 30.3.0 ts-node@10.9.2(@swc/core@1.15.21)(@types/node@22.19.17)(typescript@5.9.3): dependencies: From e76c7ce9b93a4006cc9ae5787be370bf79bb993e Mon Sep 17 00:00:00 2001 From: Evan Hahn Date: Wed, 22 Apr 2026 15:30:59 -0500 Subject: [PATCH 3/4] Removed "member not found" option from welcome email automation runs (#27457) closes https://linear.app/ghost/issue/NY-1192 ref https://github.com/TryGhost/Ghost/pull/27456 Turns out that this value will never be set because of cascade deletions. Let's drop the option. --- ghost/core/core/server/data/schema/schema.js | 2 +- .../core/core/server/services/welcome-email-automations/poll.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ghost/core/core/server/data/schema/schema.js b/ghost/core/core/server/data/schema/schema.js index 6723ec7f581..280dea31782 100644 --- a/ghost/core/core/server/data/schema/schema.js +++ b/ghost/core/core/server/data/schema/schema.js @@ -1199,7 +1199,7 @@ module.exports = { ready_at: {type: 'dateTime', nullable: true}, step_started_at: {type: 'dateTime', nullable: true}, step_attempts: {type: 'integer', unsigned: true, nullable: false, defaultTo: 0}, - exit_reason: {type: 'string', maxlength: 50, nullable: true, validations: {isIn: [['member not found', 'email send failed', 'member unsubscribed', 'member changed status', 'finished']]}}, + exit_reason: {type: 'string', maxlength: 50, nullable: true, validations: {isIn: [['email send failed', 'member unsubscribed', 'member changed status', 'finished']]}}, created_at: {type: 'dateTime', nullable: false}, updated_at: {type: 'dateTime', nullable: true}, '@@INDEXES@@': [ diff --git a/ghost/core/core/server/services/welcome-email-automations/poll.js b/ghost/core/core/server/services/welcome-email-automations/poll.js index 4e5374c3400..d7b14f227b8 100644 --- a/ghost/core/core/server/services/welcome-email-automations/poll.js +++ b/ghost/core/core/server/services/welcome-email-automations/poll.js @@ -103,7 +103,7 @@ async function updateRun(runId, attrs, transacting) { /** * @param {string} runId - * @param {'finished' | 'email send failed' | 'member changed status' | 'member not found' | 'member unsubscribed'} exitReason + * @param {'finished' | 'email send failed' | 'member changed status' | 'member unsubscribed'} exitReason * @param {Knex.Transaction} [transacting] * @returns {Promise} */ From 48069dcf2d6c9f14b9c90ba35484192031dc1233 Mon Sep 17 00:00:00 2001 From: Steve Larson <9larsons@gmail.com> Date: Wed, 22 Apr 2026 16:15:39 -0500 Subject: [PATCH 4/4] Bumped @tryghost leaf utility packages (#27517) no ref Updated a variety of framework packages. --- apps/comments-ui/package.json | 4 +- apps/portal/package.json | 4 +- apps/signup-form/package.json | 4 +- apps/sodo-search/package.json | 4 +- e2e/package.json | 2 +- ghost/core/package.json | 12 +- ghost/i18n/package.json | 2 +- pnpm-lock.yaml | 218 ++++++++++++---------------------- 8 files changed, 94 insertions(+), 156 deletions(-) diff --git a/apps/comments-ui/package.json b/apps/comments-ui/package.json index d60488624ce..7980617018d 100644 --- a/apps/comments-ui/package.json +++ b/apps/comments-ui/package.json @@ -1,6 +1,6 @@ { "name": "@tryghost/comments-ui", - "version": "1.4.7", + "version": "1.4.8", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -55,7 +55,7 @@ "@tiptap/extension-text": "2.26.3", "@tiptap/pm": "2.26.3", "@tiptap/react": "2.26.3", - "@tryghost/debug": "0.1.40", + "@tryghost/debug": "2.1.0", "react": "17.0.2", "react-dom": "17.0.2", "react-string-replace": "1.1.1" diff --git a/apps/portal/package.json b/apps/portal/package.json index 103cfbedbd7..a6718b6e10e 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -1,6 +1,6 @@ { "name": "@tryghost/portal", - "version": "2.68.12", + "version": "2.68.13", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -133,7 +133,7 @@ "vitest": "3.2.4" }, "dependencies": { - "@tryghost/debug": "0.1.40" + "@tryghost/debug": "2.1.0" }, "nx": { "tags": [ diff --git a/apps/signup-form/package.json b/apps/signup-form/package.json index 660f6287354..1ebcc7e1bf4 100644 --- a/apps/signup-form/package.json +++ b/apps/signup-form/package.json @@ -1,6 +1,6 @@ { "name": "@tryghost/signup-form", - "version": "0.3.15", + "version": "0.3.16", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -31,7 +31,7 @@ "prepublishOnly": "pnpm build" }, "dependencies": { - "@tryghost/debug": "0.1.40", + "@tryghost/debug": "2.1.0", "react": "18.3.1", "react-dom": "18.3.1" }, diff --git a/apps/sodo-search/package.json b/apps/sodo-search/package.json index 19a6fe23ff6..09cde542d63 100644 --- a/apps/sodo-search/package.json +++ b/apps/sodo-search/package.json @@ -1,6 +1,6 @@ { "name": "@tryghost/sodo-search", - "version": "1.8.12", + "version": "1.8.13", "license": "MIT", "repository": "https://github.com/TryGhost/Ghost", "author": "Ghost Foundation", @@ -14,7 +14,7 @@ "registry": "https://registry.npmjs.org/" }, "dependencies": { - "@tryghost/debug": "0.1.40", + "@tryghost/debug": "2.1.0", "@tryghost/i18n": "workspace:*", "flexsearch": "0.8.153", "react": "17.0.2", diff --git a/e2e/package.json b/e2e/package.json index 71763f74be1..96a0870c55f 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -31,7 +31,7 @@ "@eslint/js": "catalog:", "@faker-js/faker": "8.4.1", "@playwright/test": "1.59.1", - "@tryghost/debug": "0.1.40", + "@tryghost/debug": "2.1.0", "@tryghost/logging": "2.5.5", "@types/dockerode": "3.3.47", "@types/express": "4.17.25", diff --git a/ghost/core/package.json b/ghost/core/package.json index f0d89b555eb..ab05ea3f44d 100644 --- a/ghost/core/package.json +++ b/ghost/core/package.json @@ -97,7 +97,7 @@ "@tryghost/config-url-helpers": "1.0.23", "@tryghost/custom-fonts": "1.0.8", "@tryghost/database-info": "0.3.35", - "@tryghost/debug": "0.1.40", + "@tryghost/debug": "2.1.0", "@tryghost/domain-events": "1.0.8", "@tryghost/email-mock-receiver": "2.1.0", "@tryghost/errors": "1.3.13", @@ -129,20 +129,20 @@ "@tryghost/nql": "0.12.10", "@tryghost/nql-lang": "0.6.4", "@tryghost/parse-email-address": "workspace:*", - "@tryghost/pretty-cli": "1.2.52", + "@tryghost/pretty-cli": "3.1.0", "@tryghost/prometheus-metrics": "1.0.8", - "@tryghost/promise": "0.3.20", + "@tryghost/promise": "2.1.0", "@tryghost/referrer-parser": "0.1.15", "@tryghost/request": "1.0.12", - "@tryghost/root-utils": "0.3.38", + "@tryghost/root-utils": "2.1.0", "@tryghost/security": "1.0.6", "@tryghost/social-urls": "0.1.60", "@tryghost/string": "0.3.2", "@tryghost/tpl": "0.1.40", "@tryghost/url-utils": "5.1.2", "@tryghost/validator": "0.2.22", - "@tryghost/version": "0.1.38", - "@tryghost/zip": "1.1.54", + "@tryghost/version": "2.1.0", + "@tryghost/zip": "3.1.0", "body-parser": "1.20.4", "bookshelf": "1.2.0", "bookshelf-relations": "2.8.0", diff --git a/ghost/i18n/package.json b/ghost/i18n/package.json index c640df4b9ef..5292ec24179 100644 --- a/ghost/i18n/package.json +++ b/ghost/i18n/package.json @@ -37,7 +37,7 @@ "mocha": "11.7.5" }, "dependencies": { - "@tryghost/debug": "0.1.40", + "@tryghost/debug": "2.1.0", "i18next": "23.16.8" }, "nx": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1f7c0cf9243..e35cc20d99a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -777,8 +777,8 @@ importers: specifier: 2.26.3 version: 2.26.3(@tiptap/core@2.26.3(@tiptap/pm@2.26.3))(@tiptap/pm@2.26.3)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@tryghost/debug': - specifier: 0.1.40 - version: 0.1.40 + specifier: 2.1.0 + version: 2.1.0 react: specifier: 17.0.2 version: 17.0.2 @@ -865,8 +865,8 @@ importers: apps/portal: dependencies: '@tryghost/debug': - specifier: 0.1.40 - version: 0.1.40 + specifier: 2.1.0 + version: 2.1.0 devDependencies: '@babel/eslint-parser': specifier: 7.28.4 @@ -1273,8 +1273,8 @@ importers: apps/signup-form: dependencies: '@tryghost/debug': - specifier: 0.1.40 - version: 0.1.40 + specifier: 2.1.0 + version: 2.1.0 react: specifier: 18.3.1 version: 18.3.1 @@ -1379,8 +1379,8 @@ importers: apps/sodo-search: dependencies: '@tryghost/debug': - specifier: 0.1.40 - version: 0.1.40 + specifier: 2.1.0 + version: 2.1.0 '@tryghost/i18n': specifier: workspace:* version: link:../../ghost/i18n @@ -1519,8 +1519,8 @@ importers: specifier: 1.59.1 version: 1.59.1 '@tryghost/debug': - specifier: 0.1.40 - version: 0.1.40 + specifier: 2.1.0 + version: 2.1.0 '@tryghost/logging': specifier: 2.5.5 version: 2.5.5 @@ -2012,8 +2012,8 @@ importers: specifier: 0.3.35 version: 0.3.35 '@tryghost/debug': - specifier: 0.1.40 - version: 0.1.40 + specifier: 2.1.0 + version: 2.1.0 '@tryghost/domain-events': specifier: 1.0.8 version: 1.0.8 @@ -2108,14 +2108,14 @@ importers: specifier: workspace:* version: link:../parse-email-address '@tryghost/pretty-cli': - specifier: 1.2.52 - version: 1.2.52 + specifier: 3.1.0 + version: 3.1.0 '@tryghost/prometheus-metrics': specifier: 1.0.8 version: 1.0.8 '@tryghost/promise': - specifier: 0.3.20 - version: 0.3.20 + specifier: 2.1.0 + version: 2.1.0 '@tryghost/referrer-parser': specifier: 0.1.15 version: 0.1.15 @@ -2123,8 +2123,8 @@ importers: specifier: 1.0.12 version: 1.0.12 '@tryghost/root-utils': - specifier: 0.3.38 - version: 0.3.38 + specifier: 2.1.0 + version: 2.1.0 '@tryghost/security': specifier: 1.0.6 version: 1.0.6 @@ -2144,11 +2144,11 @@ importers: specifier: 0.2.22 version: 0.2.22 '@tryghost/version': - specifier: 0.1.38 - version: 0.1.38 + specifier: 2.1.0 + version: 2.1.0 '@tryghost/zip': - specifier: 1.1.54 - version: 1.1.54 + specifier: 3.1.0 + version: 3.1.0 body-parser: specifier: 1.20.4 version: 1.20.4 @@ -2599,8 +2599,8 @@ importers: ghost/i18n: dependencies: '@tryghost/debug': - specifier: 0.1.40 - version: 0.1.40 + specifier: 2.1.0 + version: 2.1.0 i18next: specifier: 23.16.8 version: 23.16.8 @@ -9147,6 +9147,9 @@ packages: '@tryghost/debug@2.0.3': resolution: {integrity: sha512-qMlZc/1/OwbN8U/X4p5yFwqAbQZPcIZK9hwHRP/iTs+giYYQT7ZmWvsbxZYcvCIcA91Ia/PO7HZnOvinNF5ZHg==} + '@tryghost/debug@2.1.0': + resolution: {integrity: sha512-lIlqhH7NvG1H8M/do1MEyd6to4Kyta96RMB5Ov7SzcsxQbl6IhMBBGv4jEnh3LQJHkKy01iyouWfNn1MHq56iQ==} + '@tryghost/domain-events@1.0.8': resolution: {integrity: sha512-4exHFUo4lRQO4f4l9FeNQEwCgfRtoUmnVBWr2WmDhVjZ09rQgW6ZrLe5f8CV7eMGQGllNjjz8780RZY9+UkONQ==} @@ -9284,12 +9287,12 @@ packages: '@tryghost/nql@0.12.10': resolution: {integrity: sha512-kpj2ICTBmkz5Uet7Z/J61C/EEBTfa55np6LnbqW6N8g33uvCh9NkAsM2WgV1NK2lffpQT3Cs/qA2ymzHAguvoA==} - '@tryghost/pretty-cli@1.2.52': - resolution: {integrity: sha512-+DGSSeKlNHQ/zqcs167W3W0D+HYz1TzAdK7TyzTBUj4Hodqxd70GfkdcWxLMNGdggKd4d59UxGZ/6n0vjVhVSA==} - '@tryghost/pretty-cli@3.0.3': resolution: {integrity: sha512-lAA6brlgQ5uyEDlpHdet7IZrspPYP5bRe6GVsnKQJ/RCTFoOC8fGhIy5E9UV37c6Ym4Jcjm/Z9adWXWiq4xhMg==} + '@tryghost/pretty-cli@3.1.0': + resolution: {integrity: sha512-vnYa/2Ke1OtBqoQWpuR1lfh+3khR00r8fJ8n+JlJjDRh7Qd9gMIkLC/SQOCHVQbEfHKT7vNsG3WYtRyDMz5WjA==} + '@tryghost/pretty-stream@0.2.5': resolution: {integrity: sha512-2bc5mk+7BAOt/mrcbjTsmUQhTKqysbIDOUUThSemPVbnij6487DhaRbnYWZW2IGKfAucrEO3h6TTm3kfioKJSw==} @@ -9302,6 +9305,9 @@ packages: '@tryghost/promise@0.3.8': resolution: {integrity: sha512-ppcnLBWczpbo4sQcGWtjEA82kdZMv4NFF2MvZRi1MBP4lSOSgh9A636eUxlB1/FpIG+D5ixq84xlY4QJMqW2kA==} + '@tryghost/promise@2.1.0': + resolution: {integrity: sha512-/hBrEOsfihCBrRnEGmsZJ54Muo8UdVTP8bq0uA+E+8DLtDMsL7BH1RX82RZ3Qvm1uTcSGOD5xwVTFBRfjmsOyA==} + '@tryghost/referrer-parser@0.1.15': resolution: {integrity: sha512-d/C1iim7X08dDBB6+xt45cUAtjyF4sje8Z+tjJ00heC+kcuZca1m/5YqosWytUCPvUpq0G5jeatZYTK8r19lag==} engines: {node: '>=16.0.0'} @@ -9315,8 +9321,8 @@ packages: '@tryghost/root-utils@0.3.38': resolution: {integrity: sha512-ARn8wC6qv867lCr7BZ+IS8S/88K5go0j6HgQFhP27rKje4b40PsxH/P3rO4Ez2NzF/Do8ywFrTWHoLCSsCazXQ==} - '@tryghost/root-utils@2.0.3': - resolution: {integrity: sha512-7fF7QLwiOoVzHVd5Qci8gsrqFIrZP5FwVrwGjSxjjF5hoOtgPn7HLdHLyIHUY9T5KgJ1/69i573E/EA+4kmAfA==} + '@tryghost/root-utils@2.1.0': + resolution: {integrity: sha512-ENU9J1EPMcIfrim93oH/5ti38WqFbvj+cVL5WUfDtlkwrAVTXDZxiyWM1hKPEpfq8g38lXaMqXqX4pN40E1RDg==} '@tryghost/security@1.0.6': resolution: {integrity: sha512-h4FiUK4ndHezlXeuRzfwTZrX/a8ZdCS/FRqmZWCHcMUiBH6lewHv8eIjsPemN6e6Gn9jtsWZsKnuYM2mD0meSQ==} @@ -9354,15 +9360,18 @@ packages: '@tryghost/version@0.1.38': resolution: {integrity: sha512-kVaM7eijFRrBLZLDbmiFxHQ/shmAg5UQ9yM4s9GZN4M3OWY34UHNmjoSOniOHnA5E8fYNA8A3IFmS3FW910xYg==} + '@tryghost/version@2.1.0': + resolution: {integrity: sha512-Iqyp1Xeik8UuthWw2M/4xYvFtcYRSoHL+bamRlbvBiL9ZOwyy1ZpfV/dMKjtStd6mLedhMdJEEYvXhIv1DvjqQ==} + '@tryghost/webhook-mock-receiver@2.1.0': resolution: {integrity: sha512-Cka5SW4igfgbGv33fFyEjkgt1HCA3lNhKCL88ThsDCw3/9ROxKQLcHMB+S7SNcewIDfsS5kI2INHtD+1Tbp/BA==} - '@tryghost/zip@1.1.54': - resolution: {integrity: sha512-6JpuYYlNytFkWTgpZnbkkoH5rqd9FIHfY0ekNNHWZFBS32D6o6bwV4v2wqFmsd0GzMG/CxaHfxfGU+HfTVTJjw==} - '@tryghost/zip@3.0.3': resolution: {integrity: sha512-gp8z5JYH5h1MGeS+MQSTsrf33XxSTOgFHJCLstcxIV5hg2pxSzo7N4Gg3+CrqrqIqLNO0aEkOkikAFtArpPwdQ==} + '@tryghost/zip@3.1.0': + resolution: {integrity: sha512-nHWRpZL8/y/Q6A22FIWgJLKjNdOgCAbXlVBK6nGp4pFNYacYXqS7h0jVllqFxqGq0KhA/vpXRKUhdhR95b0fSA==} + '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} @@ -10445,22 +10454,10 @@ packages: aproba@2.1.0: resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} - archiver-utils@2.1.0: - resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} - engines: {node: '>= 6'} - - archiver-utils@3.0.4: - resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==} - engines: {node: '>= 10'} - archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} - archiver@5.3.2: - resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} - engines: {node: '>= 10'} - archiver@7.0.1: resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} @@ -12149,10 +12146,6 @@ packages: component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} - compress-commons@4.1.2: - resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==} - engines: {node: '>= 10'} - compress-commons@6.0.2: resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} engines: {node: '>= 14'} @@ -12657,10 +12650,6 @@ packages: engines: {node: '>=0.8'} hasBin: true - crc32-stream@4.0.3: - resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==} - engines: {node: '>= 10'} - crc32-stream@6.0.0: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} @@ -17325,9 +17314,6 @@ packages: lodash.defaultsdeep@4.6.1: resolution: {integrity: sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==} - lodash.difference@4.5.0: - resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} - lodash.filter@4.6.0: resolution: {integrity: sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==} @@ -17415,9 +17401,6 @@ packages: lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - lodash.union@4.6.0: - resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} - lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} @@ -23251,10 +23234,6 @@ packages: resolution: {integrity: sha512-Ci1qN+i2H0XpY7syDQ0k5zKQ/DoxO0LzPg8PAR/X4Mpj6DqaeCoIYEEjDJwhArh3Fa7GWbQQVDZKeXYlSH4JMg==} engines: {node: '>=10'} - zip-stream@4.1.1: - resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==} - engines: {node: '>= 10'} - zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} @@ -31153,14 +31132,14 @@ snapshots: '@tryghost/bookshelf-eager-load@2.0.3': dependencies: - '@tryghost/debug': 2.0.3 + '@tryghost/debug': 2.1.0 lodash: 4.17.23 transitivePeerDependencies: - supports-color '@tryghost/bookshelf-filter@2.0.3': dependencies: - '@tryghost/debug': 2.0.3 + '@tryghost/debug': 2.1.0 '@tryghost/errors': 1.3.13 '@tryghost/nql': 0.12.10 '@tryghost/tpl': 2.0.3 @@ -31169,14 +31148,14 @@ snapshots: '@tryghost/bookshelf-has-posts@2.1.0': dependencies: - '@tryghost/debug': 2.0.3 + '@tryghost/debug': 2.1.0 lodash: 4.17.23 transitivePeerDependencies: - supports-color '@tryghost/bookshelf-include-count@2.0.3': dependencies: - '@tryghost/debug': 2.0.3 + '@tryghost/debug': 2.1.0 lodash: 4.17.23 transitivePeerDependencies: - supports-color @@ -31225,7 +31204,7 @@ snapshots: '@tryghost/config@2.0.3': dependencies: - '@tryghost/root-utils': 2.0.3 + '@tryghost/root-utils': 2.1.0 nconf: 0.13.0 '@tryghost/content-api@1.12.6': @@ -31249,7 +31228,14 @@ snapshots: '@tryghost/debug@2.0.3': dependencies: - '@tryghost/root-utils': 2.0.3 + '@tryghost/root-utils': 2.1.0 + debug: 4.4.3(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@tryghost/debug@2.1.0': + dependencies: + '@tryghost/root-utils': 2.1.0 debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -31635,12 +31621,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@tryghost/pretty-cli@1.2.52': + '@tryghost/pretty-cli@3.0.3': dependencies: chalk: 5.6.2 sywac: 1.3.0 - '@tryghost/pretty-cli@3.0.3': + '@tryghost/pretty-cli@3.1.0': dependencies: chalk: 5.6.2 sywac: 1.3.0 @@ -31664,6 +31650,8 @@ snapshots: '@tryghost/promise@0.3.8': {} + '@tryghost/promise@2.1.0': {} + '@tryghost/referrer-parser@0.1.15': {} '@tryghost/request@1.0.12': @@ -31693,7 +31681,7 @@ snapshots: caller: 1.1.0 find-root: 1.1.0 - '@tryghost/root-utils@2.0.3': + '@tryghost/root-utils@2.1.0': dependencies: caller: 1.1.0 find-root: 1.1.0 @@ -31705,7 +31693,7 @@ snapshots: '@tryghost/server@2.0.3': dependencies: - '@tryghost/debug': 2.0.3 + '@tryghost/debug': 2.1.0 '@tryghost/logging': 2.5.5 transitivePeerDependencies: - supports-color @@ -31763,19 +31751,27 @@ snapshots: '@tryghost/root-utils': 0.3.38 semver: 7.7.4 + '@tryghost/version@2.1.0': + dependencies: + '@tryghost/root-utils': 2.1.0 + semver: 7.7.4 + '@tryghost/webhook-mock-receiver@2.1.0': dependencies: p-wait-for: 6.0.0 - '@tryghost/zip@1.1.54': + '@tryghost/zip@3.0.3': dependencies: '@tryghost/errors': 1.3.13 - archiver: 5.3.2 + archiver: 7.0.1 extract-zip: 2.0.1 transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a - supports-color - '@tryghost/zip@3.0.3': + '@tryghost/zip@3.1.0': dependencies: '@tryghost/errors': 1.3.13 archiver: 7.0.1 @@ -33228,52 +33224,16 @@ snapshots: aproba@2.1.0: optional: true - archiver-utils@2.1.0: - dependencies: - glob: 7.2.3 - graceful-fs: 4.2.11 - lazystream: 1.0.1 - lodash.defaults: 4.2.0 - lodash.difference: 4.5.0 - lodash.flatten: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.union: 4.6.0 - normalize-path: 3.0.0 - readable-stream: 2.3.8 - - archiver-utils@3.0.4: - dependencies: - glob: 7.2.3 - graceful-fs: 4.2.11 - lazystream: 1.0.1 - lodash.defaults: 4.2.0 - lodash.difference: 4.5.0 - lodash.flatten: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.union: 4.6.0 - normalize-path: 3.0.0 - readable-stream: 3.6.2 - archiver-utils@5.0.2: dependencies: glob: 10.5.0 graceful-fs: 4.2.11 is-stream: 2.0.1 lazystream: 1.0.1 - lodash: 4.18.1 + lodash: 4.17.23 normalize-path: 3.0.0 readable-stream: 4.7.0 - archiver@5.3.2: - dependencies: - archiver-utils: 2.1.0 - async: 3.2.6 - buffer-crc32: 0.2.13 - readable-stream: 3.6.2 - readdir-glob: 1.1.3 - tar-stream: 2.2.0 - zip-stream: 4.1.1 - archiver@7.0.1: dependencies: archiver-utils: 5.0.2 @@ -33594,7 +33554,7 @@ snapshots: babel-types: 6.26.0 detect-indent: 4.0.0 jsesc: 1.3.0 - lodash: 4.18.1 + lodash: 4.17.23 source-map: 0.5.7 trim-right: 1.0.1 @@ -33626,7 +33586,7 @@ snapshots: babel-helper-function-name: 6.24.1 babel-runtime: 6.26.0 babel-types: 6.26.0 - lodash: 4.18.1 + lodash: 4.17.23 transitivePeerDependencies: - supports-color @@ -33667,7 +33627,7 @@ snapshots: dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 - lodash: 4.18.1 + lodash: 4.17.23 babel-helper-remap-async-to-generator@6.24.1: dependencies: @@ -33920,7 +33880,7 @@ snapshots: babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 - lodash: 4.18.1 + lodash: 4.17.23 transitivePeerDependencies: - supports-color @@ -34145,7 +34105,7 @@ snapshots: babel-runtime: 6.26.0 core-js: 2.6.12 home-or-tmp: 2.0.0 - lodash: 4.18.1 + lodash: 4.17.23 mkdirp: 0.5.6 source-map-support: 0.4.18 transitivePeerDependencies: @@ -35825,13 +35785,6 @@ snapshots: component-emitter@1.3.1: {} - compress-commons@4.1.2: - dependencies: - buffer-crc32: 0.2.13 - crc32-stream: 4.0.3 - normalize-path: 3.0.0 - readable-stream: 3.6.2 - compress-commons@6.0.2: dependencies: crc-32: 1.2.2 @@ -36063,11 +36016,6 @@ snapshots: crc-32@1.2.2: {} - crc32-stream@4.0.3: - dependencies: - crc-32: 1.2.2 - readable-stream: 3.6.2 - crc32-stream@6.0.0: dependencies: crc-32: 1.2.2 @@ -43052,8 +43000,6 @@ snapshots: lodash.defaultsdeep@4.6.1: {} - lodash.difference@4.5.0: {} - lodash.filter@4.6.0: {} lodash.flatten@3.0.2: @@ -43122,8 +43068,6 @@ snapshots: lodash.truncate@4.4.2: {} - lodash.union@4.6.0: {} - lodash.uniq@4.5.0: {} lodash.uniqby@4.5.0: @@ -50140,7 +50084,7 @@ snapshots: whatwg-url@8.7.0: dependencies: - lodash: 4.18.1 + lodash: 4.17.23 tr46: 2.1.0 webidl-conversions: 6.1.0 @@ -50401,12 +50345,6 @@ snapshots: property-expr: 2.0.6 toposort: 2.0.2 - zip-stream@4.1.1: - dependencies: - archiver-utils: 3.0.4 - compress-commons: 4.1.2 - readable-stream: 3.6.2 - zip-stream@6.0.1: dependencies: archiver-utils: 5.0.2