diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c4f656cc77d..12b3c15f187 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -21,7 +21,6 @@ env:
${{ github.workspace }}/ghost/*/node_modules
${{ github.workspace }}/e2e/node_modules
~/.cache/ms-playwright/
- NX_REJECT_UNKNOWN_LOCAL_CACHE: 0
NODE_VERSION: 22.18.0
# Disable v8-compile-cache to prevent intermittent V8 deserializer crashes
# when multiple parallel Nx workers race to read/write shared bytecode cache
@@ -31,7 +30,7 @@ env:
DISABLE_V8_COMPILE_CACHE: 1
concurrency:
- group: ${{ github.head_ref || github.run_id }}
+ group: ${{ github.head_ref || github.ref }}
cancel-in-progress: true
jobs:
@@ -164,17 +163,6 @@ jobs:
echo "dep-cache" >> "$GITHUB_ENV"
echo "$EOF" >> "$GITHUB_ENV"
- - name: Nx cache
- uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
- id: cache_nx
- with:
- path: .nxcache
- key: nx-Linux-${{ github.ref }}-${{ env.HEAD_COMMIT }}
- restore-keys: |
- nx-Linux-${{ github.ref }}-${{ env.HEAD_COMMIT }}
- nx-Linux-${{ github.ref }}
- nx-Linux
-
- name: Check dependency cache
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5
id: cache_dependencies
@@ -450,9 +438,6 @@ jobs:
env:
DEPENDENCY_CACHE_KEY: ${{ needs.job_setup.outputs.dependency_cache_key }}
- - name: Build TS packages
- run: yarn nx run-many -t build --exclude=ghost-admin
-
- name: Set timezone (non-UTC)
uses: szenius/set-timezone@1f9716b0f7120e344f0c62bb7b1ee98819aefd42 # v2.0
with:
@@ -470,12 +455,10 @@ jobs:
echo "database__connection__password=root" >> $GITHUB_ENV
- name: E2E tests
- working-directory: ghost/core
- run: yarn test:ci:e2e
+ run: yarn nx run ghost:test:ci:e2e
- name: Integration tests
- working-directory: ghost/core
- run: yarn test:ci:integration
+ run: yarn nx run ghost:test:ci:integration
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
if: matrix.node == env.NODE_VERSION && contains(matrix.env.DB, 'mysql')
@@ -540,9 +523,6 @@ jobs:
env:
DEPENDENCY_CACHE_KEY: ${{ needs.job_setup.outputs.dependency_cache_key }}
- - name: Build TS packages
- run: yarn nx run-many -t build --exclude=ghost-admin
-
- name: Set env vars (SQLite)
if: contains(matrix.env.DB, 'sqlite')
run: echo "database__connection__filename=/dev/shm/ghost-test.db" >> $GITHUB_ENV
@@ -555,8 +535,7 @@ jobs:
echo "database__connection__password=root" >> $GITHUB_ENV
- name: Legacy tests
- working-directory: ghost/core
- run: yarn test:ci:legacy
+ run: yarn nx run ghost:test:ci:legacy
- uses: tryghost/actions/actions/slack-build@0cbdcbeb9030f46b109d5e6e44c14933026d8ca5 # main
if: failure() && github.event_name == 'push' && github.ref == 'refs/heads/main'
diff --git a/apps/activitypub/package.json b/apps/activitypub/package.json
index 2c83b1a119d..c5151deff98 100644
--- a/apps/activitypub/package.json
+++ b/apps/activitypub/package.json
@@ -29,7 +29,7 @@
"preview": "vite preview"
},
"devDependencies": {
- "@playwright/test": "1.58.2",
+ "@playwright/test": "1.59.1",
"@testing-library/react": "14.3.1",
"@types/dompurify": "3.2.0",
"@types/jest": "29.5.14",
diff --git a/apps/admin-x-design-system/package.json b/apps/admin-x-design-system/package.json
index 314d89033dd..31925182cdc 100644
--- a/apps/admin-x-design-system/package.json
+++ b/apps/admin-x-design-system/package.json
@@ -48,14 +48,14 @@
"eslint-plugin-react-refresh": "0.4.24",
"eslint-plugin-tailwindcss": "4.0.0-beta.0",
"jsdom": "28.1.0",
- "lodash-es": "4.17.21",
+ "lodash-es": "4.17.23",
"postcss": "8.5.6",
"postcss-import": "16.1.1",
"react": "18.3.1",
"react-dom": "18.3.1",
"rollup-plugin-node-builtins": "2.1.2",
"sinon": "18.0.1",
- "storybook": "8.6.14",
+ "storybook": "8.6.15",
"tailwindcss": "4.2.1",
"typescript": "5.9.3",
"validator": "13.12.0",
diff --git a/apps/admin-x-settings/package.json b/apps/admin-x-settings/package.json
index 1601cd829b6..35da1b61ceb 100644
--- a/apps/admin-x-settings/package.json
+++ b/apps/admin-x-settings/package.json
@@ -40,22 +40,22 @@
},
"dependencies": {
"@codemirror/lang-html": "6.4.11",
- "@tryghost/color-utils": "0.2.10",
+ "@tryghost/color-utils": "0.2.16",
"@tryghost/i18n": "0.0.0",
"@tryghost/kg-unsplash-selector": "0.3.24",
- "@tryghost/limit-service": "1.4.1",
+ "@tryghost/limit-service": "1.5.2",
"@tryghost/nql": "0.12.10",
- "@tryghost/timezone-data": "0.4.12",
+ "@tryghost/timezone-data": "0.4.18",
"react": "18.3.1",
"react-dom": "18.3.1",
"validator": "13.12.0"
},
"devDependencies": {
- "@playwright/test": "1.58.2",
+ "@playwright/test": "1.59.1",
"@testing-library/react": "14.3.1",
"@tryghost/admin-x-design-system": "0.0.0",
"@tryghost/admin-x-framework": "0.0.0",
- "@tryghost/custom-fonts": "1.0.2",
+ "@tryghost/custom-fonts": "1.0.8",
"@tryghost/shade": "0.0.0",
"@types/react": "18.3.28",
"@types/react-dom": "18.3.7",
diff --git a/apps/admin/package.json b/apps/admin/package.json
index 92c863c1eb9..22a3b0779e0 100644
--- a/apps/admin/package.json
+++ b/apps/admin/package.json
@@ -34,7 +34,7 @@
"eslint-plugin-react-hooks": "5.2.0",
"eslint-plugin-react-refresh": "0.4.24",
"eslint-plugin-tailwindcss": "4.0.0-beta.0",
- "globals": "16.5.0",
+ "globals": "17.4.0",
"jest-extended": "6.0.0",
"jsdom": "28.1.0",
"sirv": "3.0.2",
diff --git a/apps/announcement-bar/package.json b/apps/announcement-bar/package.json
index c4a13f29b38..bdea2b79dc9 100644
--- a/apps/announcement-bar/package.json
+++ b/apps/announcement-bar/package.json
@@ -1,6 +1,6 @@
{
"name": "@tryghost/announcement-bar",
- "version": "1.1.14",
+ "version": "1.1.15",
"license": "MIT",
"repository": "https://github.com/TryGhost/Ghost",
"author": "Ghost Foundation",
@@ -14,7 +14,7 @@
"registry": "https://registry.npmjs.org/"
},
"dependencies": {
- "@tryghost/content-api": "1.12.0",
+ "@tryghost/content-api": "1.12.6",
"react": "17.0.2",
"react-dom": "17.0.2"
},
diff --git a/apps/comments-ui/package.json b/apps/comments-ui/package.json
index a19dd672ec0..c48c12cecd1 100644
--- a/apps/comments-ui/package.json
+++ b/apps/comments-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@tryghost/comments-ui",
- "version": "1.4.3",
+ "version": "1.4.4",
"license": "MIT",
"repository": "https://github.com/TryGhost/Ghost",
"author": "Ghost Foundation",
@@ -60,7 +60,7 @@
"react-string-replace": "1.1.1"
},
"devDependencies": {
- "@playwright/test": "1.58.2",
+ "@playwright/test": "1.59.1",
"@testing-library/jest-dom": "5.17.0",
"@testing-library/react": "12.1.5",
"@testing-library/user-event": "14.6.1",
diff --git a/apps/shade/package.json b/apps/shade/package.json
index ed21b4e14f4..3b96186387e 100644
--- a/apps/shade/package.json
+++ b/apps/shade/package.json
@@ -92,7 +92,7 @@
"eslint-plugin-storybook": "10.3.3",
"eslint-plugin-tailwindcss": "4.0.0-beta.0",
"jsdom": "28.1.0",
- "lodash-es": "4.17.21",
+ "lodash-es": "4.17.23",
"postcss": "8.5.6",
"rollup-plugin-node-builtins": "2.1.2",
"sinon": "18.0.1",
diff --git a/apps/signup-form/package.json b/apps/signup-form/package.json
index 5dd095d5b8e..dc3e6786d38 100644
--- a/apps/signup-form/package.json
+++ b/apps/signup-form/package.json
@@ -1,6 +1,6 @@
{
"name": "@tryghost/signup-form",
- "version": "0.3.10",
+ "version": "0.3.12",
"license": "MIT",
"repository": "https://github.com/TryGhost/Ghost",
"author": "Ghost Foundation",
@@ -35,7 +35,7 @@
"react-dom": "18.3.1"
},
"devDependencies": {
- "@playwright/test": "1.58.2",
+ "@playwright/test": "1.59.1",
"@storybook/addon-essentials": "8.6.14",
"@storybook/addon-interactions": "8.6.14",
"@storybook/addon-links": "8.6.14",
@@ -59,7 +59,7 @@
"postcss-import": "16.1.1",
"prop-types": "15.8.1",
"rollup-plugin-node-builtins": "2.1.2",
- "storybook": "8.6.14",
+ "storybook": "8.6.15",
"stylelint": "15.11.0",
"tailwindcss": "3.4.18",
"vite": "5.4.21",
diff --git a/apps/stats/package.json b/apps/stats/package.json
index f7d120ee973..289d652cc2b 100644
--- a/apps/stats/package.json
+++ b/apps/stats/package.json
@@ -34,7 +34,7 @@
},
"devDependencies": {
"@faker-js/faker": "9.9.0",
- "@playwright/test": "1.58.2",
+ "@playwright/test": "1.59.1",
"@tanstack/react-query": "4.36.1",
"@testing-library/jest-dom": "5.17.0",
"@testing-library/react": "14.3.1",
diff --git a/e2e/package.json b/e2e/package.json
index 91269f246db..36eacc031de 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -31,7 +31,7 @@
"devDependencies": {
"@eslint/js": "9.37.0",
"@faker-js/faker": "8.4.1",
- "@playwright/test": "1.58.2",
+ "@playwright/test": "1.59.1",
"@tryghost/debug": "0.1.40",
"@tryghost/logging": "2.5.5",
"@types/dockerode": "3.3.47",
diff --git a/ghost/admin/package.json b/ghost/admin/package.json
index 79b6d004bf9..b0614aa176c 100644
--- a/ghost/admin/package.json
+++ b/ghost/admin/package.json
@@ -45,18 +45,18 @@
"@sentry/integrations": "7.114.0",
"@sentry/replay": "7.116.0",
"@tryghost/admin-x-framework": "0.0.0",
- "@tryghost/color-utils": "0.2.10",
+ "@tryghost/color-utils": "0.2.16",
"@tryghost/ember-promise-modals": "2.0.1",
- "@tryghost/helpers": "1.1.97",
+ "@tryghost/helpers": "1.1.103",
"@tryghost/kg-clean-basic-html": "4.2.21",
"@tryghost/kg-converters": "1.1.20",
"@tryghost/koenig-lexical": "1.7.28",
- "@tryghost/limit-service": "1.4.1",
- "@tryghost/members-csv": "2.0.3",
+ "@tryghost/limit-service": "1.5.2",
+ "@tryghost/members-csv": "2.0.5",
"@tryghost/nql": "0.12.10",
"@tryghost/nql-lang": "0.6.4",
- "@tryghost/string": "0.2.17",
- "@tryghost/timezone-data": "0.4.12",
+ "@tryghost/string": "0.3.2",
+ "@tryghost/timezone-data": "0.4.18",
"animejs": "3.2.2",
"autoprefixer": "9.8.6",
"babel-plugin-transform-class-properties": "6.24.1",
@@ -124,7 +124,7 @@
"ember-truth-helpers": "3.1.1",
"eslint-plugin-babel": "5.3.1",
"flexsearch": "0.7.43",
- "fs-extra": "11.3.0",
+ "fs-extra": "11.3.4",
"glob": "8.1.0",
"google-caja-bower": "https://github.com/acburdine/google-caja-bower#ghost",
"keymaster": "https://github.com/madrobby/keymaster.git",
diff --git a/ghost/core/core/server/data/migrations/versions/6.28/2026-04-08-21-40-32-add-show-header-icon-to-email-design-settings.js b/ghost/core/core/server/data/migrations/versions/6.28/2026-04-08-21-40-32-add-show-header-icon-to-email-design-settings.js
new file mode 100644
index 00000000000..5347786bbe1
--- /dev/null
+++ b/ghost/core/core/server/data/migrations/versions/6.28/2026-04-08-21-40-32-add-show-header-icon-to-email-design-settings.js
@@ -0,0 +1,7 @@
+const {createAddColumnMigration} = require('../../utils');
+
+module.exports = createAddColumnMigration('email_design_settings', 'show_header_icon', {
+ type: 'boolean',
+ nullable: false,
+ defaultTo: true
+});
diff --git a/ghost/core/core/server/data/migrations/versions/6.28/2026-04-09-15-17-41-drop-nullable-gifts-expires-at.js b/ghost/core/core/server/data/migrations/versions/6.28/2026-04-09-15-17-41-drop-nullable-gifts-expires-at.js
new file mode 100644
index 00000000000..fcb6afb67e4
--- /dev/null
+++ b/ghost/core/core/server/data/migrations/versions/6.28/2026-04-09-15-17-41-drop-nullable-gifts-expires-at.js
@@ -0,0 +1,3 @@
+const {createDropNullableMigration} = require('../../utils');
+
+module.exports = createDropNullableMigration('gifts', 'expires_at');
diff --git a/ghost/core/core/server/data/schema/schema.js b/ghost/core/core/server/data/schema/schema.js
index cd520340695..2618d0c83f7 100644
--- a/ghost/core/core/server/data/schema/schema.js
+++ b/ghost/core/core/server/data/schema/schema.js
@@ -1149,6 +1149,7 @@ module.exports = {
background_color: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'light'},
header_background_color: {type: 'string', maxlength: 50, nullable: false, defaultTo: 'transparent'},
header_image: {type: 'string', maxlength: 2000, nullable: true},
+ show_header_icon: {type: 'boolean', nullable: false, defaultTo: true},
show_header_title: {type: 'boolean', nullable: false, defaultTo: true},
footer_content: {type: 'text', maxlength: 1000000000, nullable: true},
button_color: {type: 'string', maxlength: 50, nullable: true, defaultTo: 'accent'},
@@ -1223,7 +1224,7 @@ module.exports = {
stripe_payment_intent_id: {type: 'string', maxlength: 255, nullable: false, unique: true},
consumes_at: {type: 'dateTime', nullable: true},
- expires_at: {type: 'dateTime', nullable: true},
+ expires_at: {type: 'dateTime', nullable: false},
status: {
type: 'string', maxlength: 50, nullable: false, validations: {
diff --git a/ghost/core/core/server/models/email-design-setting.js b/ghost/core/core/server/models/email-design-setting.js
index a26a02fce4c..2ea205cfe1a 100644
--- a/ghost/core/core/server/models/email-design-setting.js
+++ b/ghost/core/core/server/models/email-design-setting.js
@@ -7,6 +7,7 @@ const EmailDesignSetting = ghostBookshelf.Model.extend({
return {
background_color: 'light',
header_background_color: 'transparent',
+ show_header_icon: true,
show_header_title: true,
button_color: 'accent',
button_corners: 'rounded',
diff --git a/ghost/core/core/server/services/email-service/email-renderer.js b/ghost/core/core/server/services/email-service/email-renderer.js
index 80900185ace..adac5046b42 100644
--- a/ghost/core/core/server/services/email-service/email-renderer.js
+++ b/ghost/core/core/server/services/email-service/email-renderer.js
@@ -1031,6 +1031,10 @@ class EmailRenderer {
}
const postUrl = this.#getPostUrl(post);
+ const isPublicPost = post.get('visibility') === 'public';
+ const showShareButton = isPublicPost && newsletter.get('show_share_button');
+ const shareUrl = new URL(postUrl);
+ shareUrl.hash = '/share';
// Signup URL is the post url with a hash added to it
const signupUrl = new URL(postUrl);
@@ -1054,6 +1058,12 @@ class EmailRenderer {
commentUrl.hash = '#ghost-comments-root';
const hasEmailOnlyFlag = post.related('posts_meta')?.get('email_only') ?? false;
+ const hasFeedbackButtons = newsletter.get('feedback_enabled');
+ const showCommentCta = newsletter.get('show_comment_cta') && this.#settingsCache.get('comments_enabled') !== 'off' && !hasEmailOnlyFlag;
+ const feedbackButtonCount = (hasFeedbackButtons ? 2 : 0) + (showCommentCta ? 1 : 0) + (showShareButton ? 1 : 0);
+ const feedbackButtonCellWidth = feedbackButtonCount > 0
+ ? `${(100 / feedbackButtonCount).toFixed(2).replace(/\.00$/, '')}%`
+ : null;
const latestPosts = [];
let latestPostsHasImages = false;
@@ -1114,6 +1124,7 @@ class EmailRenderer {
post: {
title: post.get('title'),
url: postUrl,
+ shareUrl: showShareButton ? shareUrl.href : null,
commentUrl: commentUrl.href,
authors,
publishedAt,
@@ -1129,7 +1140,7 @@ class EmailRenderer {
name: newsletter.get('name'),
showPostTitleSection: newsletter.get('show_post_title_section'),
showExcerpt: newsletter.get('show_excerpt'),
- showCommentCta: newsletter.get('show_comment_cta') && this.#settingsCache.get('comments_enabled') !== 'off' && !hasEmailOnlyFlag,
+ showCommentCta,
showSubscriptionDetails: newsletter.get('show_subscription_details')
},
@@ -1200,10 +1211,11 @@ class EmailRenderer {
},
// Audience feedback
- feedbackButtons: newsletter.get('feedback_enabled') ? {
+ feedbackButtons: hasFeedbackButtons ? {
likeHref: positiveLink,
dislikeHref: negativeLink
} : null,
+ feedbackButtonCellWidth,
// Paywall
paywall: addPaywall ? {
diff --git a/ghost/core/core/server/services/email-service/email-templates/partials/feedback-button.hbs b/ghost/core/core/server/services/email-service/email-templates/partials/feedback-button.hbs
index 57efa82c7a2..fdd0eb869b6 100644
--- a/ghost/core/core/server/services/email-service/email-templates/partials/feedback-button.hbs
+++ b/ghost/core/core/server/services/email-service/email-templates/partials/feedback-button.hbs
@@ -1,7 +1,7 @@
-
+ |
-
+
{{t buttonText}}
- {{!-- Button text possible values: {{t 'More like this'}} {{t 'Less like this'}} {{t 'Comment'}} --}}
+ {{!-- Button text possible values: {{t 'More like this'}} {{t 'Less like this'}} {{t 'Comment'}} {{t 'Share'}} --}}
- |
\ No newline at end of file
+
diff --git a/ghost/core/core/server/services/email-service/email-templates/template.hbs b/ghost/core/core/server/services/email-service/email-templates/template.hbs
index 1be45c3d5f8..19b23914957 100644
--- a/ghost/core/core/server/services/email-service/email-templates/template.hbs
+++ b/ghost/core/core/server/services/email-service/email-templates/template.hbs
@@ -19,17 +19,20 @@
- {{#if (or feedbackButtons newsletter.showCommentCta) }}
+ {{#if (or feedbackButtons newsletter.showCommentCta post.shareUrl) }}
|
diff --git a/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs b/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs
index 2efc6e7ae74..ee92318fa55 100644
--- a/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs
+++ b/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.hbs
@@ -40,7 +40,7 @@
|
Your gift is ready to share!
- Share the link below with the recipient to let them redeem their gift membership.
+ Share the link below with the recipient to let them redeem their gift membership.
@@ -49,24 +49,41 @@
|
Gift subscription
- {{gift.tierName}} ({{gift.cadenceLabel}})
+ {{gift.tierName}} • {{gift.cadenceLabel}}
Amount paid
- {{gift.amount}}
+ {{gift.amount}}
+ Redemption link
+ {{gift.link}}
|
+
|
-
-
+
+
|
- Redemption link
- {{gift.link}}
- This link can be redeemed once and expires on {{gift.expiresAt}}.
+ This link can be redeemed once and expires on {{gift.expiresAt}}. It's only available to free or new members.
|
diff --git a/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts b/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts
index 79d891a61e1..905e155921d 100644
--- a/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts
+++ b/ghost/core/core/server/services/gifts/email-templates/gift-purchase-confirmation.ts
@@ -16,12 +16,12 @@ export function renderText(data: GiftPurchaseConfirmationData): string {
Share the link below with the recipient to let them redeem their gift membership.
-Gift subscription: ${data.gift.tierName} (${data.gift.cadenceLabel})
+Gift subscription: ${data.gift.tierName} • ${data.gift.cadenceLabel}
Amount paid: ${data.gift.amount}
Redemption link: ${data.gift.link}
-This link can be redeemed once and expires on ${data.gift.expiresAt}.
+This link can be redeemed once and expires on ${data.gift.expiresAt}. It's only available to free or new members.
---
diff --git a/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts b/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts
index eaaf7b7f513..f262ded62f4 100644
--- a/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts
+++ b/ghost/core/core/server/services/gifts/gift-bookshelf-repository.ts
@@ -23,7 +23,7 @@ type GiftRow = {
stripe_checkout_session_id: string;
stripe_payment_intent_id: string;
consumes_at: Date | null;
- expires_at: Date | null;
+ expires_at: Date;
status: GiftStatus;
purchased_at: Date;
redeemed_at: Date | null;
diff --git a/ghost/core/core/server/services/gifts/gift-email-service.ts b/ghost/core/core/server/services/gifts/gift-email-service.ts
index 1c1017f7d22..64e0da34212 100644
--- a/ghost/core/core/server/services/gifts/gift-email-service.ts
+++ b/ghost/core/core/server/services/gifts/gift-email-service.ts
@@ -65,14 +65,22 @@ export class GiftEmailService {
const formattedAmount = this.formatAmount({currency, amount: amount / 100});
const siteDomain = this.siteDomain;
const siteUrl = this.urlUtils.getSiteUrl();
+ const siteTitle = this.settingsCache.get('title') ?? siteDomain;
const giftLink = `${siteUrl.replace(/\/$/, '')}/gift/${token}`;
const unit = cadence === 'month' ? 'month' : 'year';
const cadenceLabel = duration === 1 ? `1 ${unit}` : `${duration} ${unit}s`;
+ // Pre-build a mailto: URL the buyer can click to open their default mail
+ // client with a friendly draft already filled in. Recipient is left blank
+ // — that's the one thing only the buyer knows.
+ const mailtoSubject = `I got you a gift subscription to ${siteTitle}`;
+ const mailtoBody = `Hi,\n\nI bought you a subscription to ${siteTitle}. You can redeem it here:\n\n${giftLink}`;
+ const mailtoUrl = `mailto:?subject=${encodeURIComponent(mailtoSubject)}&body=${encodeURIComponent(mailtoBody)}`;
+
const templateData = {
- siteTitle: this.settingsCache.get('title') ?? siteDomain,
+ siteTitle,
siteUrl,
siteIconUrl: this.blogIcon.getIconUrl({absolute: true, fallbackToDefault: false}),
siteDomain,
@@ -83,6 +91,7 @@ export class GiftEmailService {
tierName,
cadenceLabel,
link: giftLink,
+ mailtoUrl,
expiresAt: moment(expiresAt).format('D MMM YYYY')
}
};
diff --git a/ghost/core/core/server/services/gifts/gift-service.ts b/ghost/core/core/server/services/gifts/gift-service.ts
index c569c40a3c9..c2503413dc7 100644
--- a/ghost/core/core/server/services/gifts/gift-service.ts
+++ b/ghost/core/core/server/services/gifts/gift-service.ts
@@ -48,6 +48,9 @@ interface StaffServiceEmails {
memberId: string | null;
amount: number;
currency: string;
+ tierName: string;
+ cadence: 'month' | 'year';
+ duration: number;
}): Promise;
}
@@ -125,29 +128,28 @@ export class GiftService {
await this.giftRepository.create(gift);
+ const tier = await this.tiersService.api.read(data.tierId);
+
+ if (!tier) {
+ throw new errors.NotFoundError({message: `Tier not found: ${data.tierId}`});
+ }
+
try {
await this.staffServiceEmails.notifyGiftReceived({
name: member?.get('name') ?? null,
email: member?.get('email') ?? data.buyerEmail,
memberId: member?.id ?? null,
amount: data.amount,
- currency: data.currency
+ currency: data.currency,
+ tierName: tier.name,
+ cadence: data.cadence,
+ duration
});
} catch (err) {
logging.error('Failed to notify staff of gift purchase', err);
}
try {
- if (!gift.expiresAt) {
- throw new errors.InternalServerError({message: 'Gift is missing expiration date'});
- }
-
- const tier = await this.tiersService.api.read(data.tierId);
-
- if (!tier) {
- throw new errors.NotFoundError({message: `Tier not found: ${data.tierId}`});
- }
-
await this.giftEmailService.sendPurchaseConfirmation({
buyerEmail: data.buyerEmail,
amount: data.amount,
diff --git a/ghost/core/core/server/services/gifts/gift.ts b/ghost/core/core/server/services/gifts/gift.ts
index 213102c0803..a5cce2071e6 100644
--- a/ghost/core/core/server/services/gifts/gift.ts
+++ b/ghost/core/core/server/services/gifts/gift.ts
@@ -20,7 +20,7 @@ interface GiftData {
stripeCheckoutSessionId: string;
stripePaymentIntentId: string;
consumesAt: Date | null;
- expiresAt: Date | null;
+ expiresAt: Date;
status: GiftStatus;
purchasedAt: Date;
redeemedAt: Date | null;
@@ -55,7 +55,7 @@ export class Gift {
stripeCheckoutSessionId: string;
stripePaymentIntentId: string;
consumesAt: Date | null;
- expiresAt: Date | null;
+ expiresAt: Date;
status: GiftStatus;
purchasedAt: Date;
redeemedAt: Date | null;
diff --git a/ghost/core/core/server/services/staff/email-templates/gift.hbs b/ghost/core/core/server/services/staff/email-templates/gift.hbs
index 007a3707882..d9d82efadbc 100644
--- a/ghost/core/core/server/services/staff/email-templates/gift.hbs
+++ b/ghost/core/core/server/services/staff/email-templates/gift.hbs
@@ -38,6 +38,8 @@
From
{{gift.name}} {{#if memberData}}• View{{/if}}
+ Tier
+ {{gift.tierName}} • {{gift.cadenceLabel}}
Amount received
{{gift.amount}}
|
diff --git a/ghost/core/core/server/services/staff/email-templates/gift.txt.js b/ghost/core/core/server/services/staff/email-templates/gift.txt.js
index 72de03f171b..92e7c5d7e53 100644
--- a/ghost/core/core/server/services/staff/email-templates/gift.txt.js
+++ b/ghost/core/core/server/services/staff/email-templates/gift.txt.js
@@ -3,7 +3,9 @@ module.exports = function giftText(data) {
return `
Someone purchased a gift subscription!
-You received a gift subscription purchase of ${data.gift.amount} from "${data.gift.name}".
+From: ${data.gift.name}
+Tier: ${data.gift.tierName} • ${data.gift.cadenceLabel}
+Amount received: ${data.gift.amount}
---
diff --git a/ghost/core/core/server/services/staff/staff-service-emails.js b/ghost/core/core/server/services/staff/staff-service-emails.js
index aa56d8a8314..fcbb7358425 100644
--- a/ghost/core/core/server/services/staff/staff-service-emails.js
+++ b/ghost/core/core/server/services/staff/staff-service-emails.js
@@ -301,10 +301,13 @@ class StaffServiceEmails {
* @param {string|null} eventData.memberId
* @param {number} eventData.amount - amount in cents
* @param {string} eventData.currency
+ * @param {string} eventData.tierName
+ * @param {'month'|'year'} eventData.cadence
+ * @param {number} eventData.duration
*
* @returns {Promise}
*/
- async notifyGiftReceived({name, email, memberId, amount, currency}) {
+ async notifyGiftReceived({name, email, memberId, amount, currency, tierName, cadence, duration}) {
const users = await this.models.User.getEmailAlertUsers('gift-purchased');
const formattedAmount = this.getFormattedAmount({currency, amount: amount / 100});
@@ -316,6 +319,8 @@ class StaffServiceEmails {
email
}) : null;
+ const cadenceLabel = duration === 1 ? `1 ${cadence}` : `${duration} ${cadence}s`;
+
await this.sendToStaff({
users,
subject,
@@ -324,7 +329,9 @@ class StaffServiceEmails {
templateData: {
gift: {
name: displayName,
- amount: formattedAmount
+ amount: formattedAmount,
+ tierName,
+ cadenceLabel
}
}
});
diff --git a/ghost/core/package.json b/ghost/core/package.json
index f66302544a0..0e7b1a1305b 100644
--- a/ghost/core/package.json
+++ b/ghost/core/package.json
@@ -77,16 +77,16 @@
"@tryghost/admin-api-schema": "4.7.2",
"@tryghost/api-framework": "1.0.7",
"@tryghost/bookshelf-plugins": "2.0.3",
- "@tryghost/color-utils": "0.2.10",
- "@tryghost/config-url-helpers": "1.0.17",
- "@tryghost/custom-fonts": "1.0.2",
+ "@tryghost/color-utils": "0.2.16",
+ "@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/domain-events": "1.0.8",
- "@tryghost/email-mock-receiver": "0.3.11",
+ "@tryghost/email-mock-receiver": "0.3.16",
"@tryghost/errors": "1.3.13",
- "@tryghost/helpers": "1.1.97",
- "@tryghost/html-to-plaintext": "1.0.4",
+ "@tryghost/helpers": "1.1.103",
+ "@tryghost/html-to-plaintext": "1.0.8",
"@tryghost/http-cache-utils": "0.1.25",
"@tryghost/i18n": "0.0.0",
"@tryghost/image-transform": "1.4.13",
@@ -102,9 +102,9 @@
"@tryghost/kg-lexical-html-renderer": "1.3.40",
"@tryghost/kg-markdown-html-renderer": "7.1.16",
"@tryghost/kg-mobiledoc-html-renderer": "7.1.16",
- "@tryghost/limit-service": "1.4.1",
+ "@tryghost/limit-service": "1.5.2",
"@tryghost/logging": "2.5.5",
- "@tryghost/members-csv": "2.0.3",
+ "@tryghost/members-csv": "2.0.5",
"@tryghost/metrics": "1.0.43",
"@tryghost/mw-error-handler": "1.0.13",
"@tryghost/mw-vhost": "1.0.6",
@@ -119,7 +119,7 @@
"@tryghost/root-utils": "0.3.38",
"@tryghost/security": "1.0.6",
"@tryghost/social-urls": "0.1.60",
- "@tryghost/string": "0.2.17",
+ "@tryghost/string": "0.3.2",
"@tryghost/tpl": "0.1.40",
"@tryghost/url-utils": "5.1.2",
"@tryghost/validator": "0.2.22",
@@ -160,11 +160,11 @@
"express-session": "1.19.0",
"file-type": "16.5.4",
"form-data": "4.0.5",
- "fs-extra": "11.3.0",
+ "fs-extra": "11.3.4",
"ghost-storage-base": "1.1.2",
"glob": "8.1.0",
"got": "13.0.0",
- "gscan": "5.4.0",
+ "gscan": "5.4.1",
"handlebars": "4.7.9",
"heic-convert": "2.1.0",
"html-to-text": "5.1.1",
@@ -182,7 +182,7 @@
"knex": "2.4.2",
"knex-migrator": "5.3.2",
"leaky-bucket": "2.2.0",
- "lodash": "4.17.21",
+ "lodash": "4.17.23",
"luxon": "3.7.2",
"mailgun.js": "10.4.0",
"metascraper": "5.45.15",
@@ -228,8 +228,8 @@
"devDependencies": {
"@actions/core": "3.0.0",
"@prettier/sync": "0.6.1",
- "@tryghost/express-test": "0.15.0",
- "@tryghost/webhook-mock-receiver": "0.2.17",
+ "@tryghost/express-test": "0.15.5",
+ "@tryghost/webhook-mock-receiver": "0.2.22",
"@types/bookshelf": "1.2.9",
"@types/common-tags": "1.8.4",
"@types/jsonwebtoken": "9.0.10",
@@ -280,12 +280,7 @@
"targets": {
"build:tsc": {
"dependsOn": [
- {
- "projects": [
- "@tryghost/parse-email-address"
- ],
- "target": "build"
- }
+ "^build"
]
},
"archive": {
@@ -307,12 +302,7 @@
},
"lint": {
"dependsOn": [
- {
- "projects": [
- "@tryghost/parse-email-address"
- ],
- "target": "build"
- }
+ "^build"
]
},
"test:all": {
@@ -323,12 +313,22 @@
"test:unit": {
"dependsOn": [
"build:assets",
- {
- "projects": [
- "@tryghost/parse-email-address"
- ],
- "target": "build"
- }
+ "^build"
+ ]
+ },
+ "test:ci:e2e": {
+ "dependsOn": [
+ "^build"
+ ]
+ },
+ "test:ci:legacy": {
+ "dependsOn": [
+ "^build"
+ ]
+ },
+ "test:ci:integration": {
+ "dependsOn": [
+ "^build"
]
}
}
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 2a6a8c6b7d0..6a953e5909d 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
@@ -20,6 +20,7 @@ Object {
"link_style": "bold",
"section_title_color": null,
"show_badge": true,
+ "show_header_icon": false,
"show_header_title": true,
"slug": "default-automated-email",
"title_font_category": "sans_serif",
@@ -34,7 +35,7 @@ exports[`Automated Email Design API Edit Can edit the automated email design 2:
Object {
"access-control-allow-origin": "http://127.0.0.1:2369",
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
- "content-length": "607",
+ "content-length": "632",
"content-type": "application/json; charset=utf-8",
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
@@ -218,6 +219,7 @@ Object {
"link_style": "underline",
"section_title_color": null,
"show_badge": true,
+ "show_header_icon": true,
"show_header_title": true,
"slug": "default-automated-email",
"title_font_category": "sans_serif",
@@ -232,7 +234,7 @@ exports[`Automated Email Design API Read Can read the default automated email de
Object {
"access-control-allow-origin": "http://127.0.0.1:2369",
"cache-control": "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0",
- "content-length": "616",
+ "content-length": "640",
"content-type": "application/json; charset=utf-8",
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
"etag": StringMatching /\\(\\?:W\\\\/\\)\\?"\\(\\?:\\[ !#-\\\\x7E\\\\x80-\\\\xFF\\]\\*\\|\\\\r\\\\n\\[\\\\t \\]\\|\\\\\\\\\\.\\)\\*"/,
diff --git a/ghost/core/test/e2e-api/admin/automated-email-design.test.js b/ghost/core/test/e2e-api/admin/automated-email-design.test.js
index d4b24d26480..fc847cdddc0 100644
--- a/ghost/core/test/e2e-api/admin/automated-email-design.test.js
+++ b/ghost/core/test/e2e-api/admin/automated-email-design.test.js
@@ -39,7 +39,8 @@ describe('Automated Email Design API', function () {
.body({automated_email_design: [{
background_color: 'dark',
button_corners: 'pill',
- link_style: 'bold'
+ link_style: 'bold',
+ show_header_icon: false
}]})
.expectStatus(200)
.matchBodySnapshot({
diff --git a/ghost/core/test/integration/services/email-service/batch-sending.test.js b/ghost/core/test/integration/services/email-service/batch-sending.test.js
index 59b5dbeb951..50e05603a7b 100644
--- a/ghost/core/test/integration/services/email-service/batch-sending.test.js
+++ b/ghost/core/test/integration/services/email-service/batch-sending.test.js
@@ -899,6 +899,46 @@ describe.skip('Batch sending tests', function () {
await models.Newsletter.edit({show_comment_cta: true}, {id: defaultNewsletter.id});
});
+ it('Shows share button when enabled in newsletter for public posts', async function () {
+ mockSetting('email_track_clicks', false); // Disable link replacement for this test
+
+ const defaultNewsletter = await getDefaultNewsletter();
+ const originalShowShareButton = defaultNewsletter.get('show_share_button');
+ await models.Newsletter.edit({show_share_button: true}, {id: defaultNewsletter.id});
+
+ try {
+ const {html} = await sendEmail(agent, {
+ title: 'This is a test post title',
+ mobiledoc: mobileDocExample,
+ visibility: 'public'
+ });
+
+ assert.match(html, /#\/share/);
+ } finally {
+ await models.Newsletter.edit({show_share_button: originalShowShareButton}, {id: defaultNewsletter.id});
+ }
+ });
+
+ it('Hides share button when disabled in newsletter', async function () {
+ mockSetting('email_track_clicks', false); // Disable link replacement for this test
+
+ const defaultNewsletter = await getDefaultNewsletter();
+ const originalShowShareButton = defaultNewsletter.get('show_share_button');
+ await models.Newsletter.edit({show_share_button: false}, {id: defaultNewsletter.id});
+
+ try {
+ const {html} = await sendEmail(agent, {
+ title: 'This is a test post title',
+ mobiledoc: mobileDocExample,
+ visibility: 'public'
+ });
+
+ assert.doesNotMatch(html, /#\/share/);
+ } finally {
+ await models.Newsletter.edit({show_share_button: originalShowShareButton}, {id: defaultNewsletter.id});
+ }
+ });
+
it('Shows subscription details box for free members', async function () {
// Create a new member without a first_name
await models.Member.add({
diff --git a/ghost/core/test/unit/server/data/schema/integrity.test.js b/ghost/core/test/unit/server/data/schema/integrity.test.js
index a8c237a7e16..d164a9eaad7 100644
--- a/ghost/core/test/unit/server/data/schema/integrity.test.js
+++ b/ghost/core/test/unit/server/data/schema/integrity.test.js
@@ -35,7 +35,7 @@ const validateRouteSettings = require('../../../../../core/server/services/route
*/
describe('DB version integrity', function () {
// Only these variables should need updating
- const currentSchemaHash = '6186d5aa5b62b6689ee8786efd5daccc';
+ const currentSchemaHash = '1aedfe928922388669e594aa6b762871';
const currentFixturesHash = '2f86ab1e3820e86465f9ad738dd0ee93';
const currentSettingsHash = 'a102b80d2ab0cd92325ed007c94d7da6';
const currentRoutesHash = '3d180d52c663d173a6be791ef411ed01';
diff --git a/ghost/core/test/unit/server/services/email-service/email-renderer.test.js b/ghost/core/test/unit/server/services/email-service/email-renderer.test.js
index 4662335eb79..abf4397bd31 100644
--- a/ghost/core/test/unit/server/services/email-service/email-renderer.test.js
+++ b/ghost/core/test/unit/server/services/email-service/email-renderer.test.js
@@ -1265,6 +1265,7 @@ describe('Email renderer', function () {
name: 'Test Newsletter',
show_badge: false,
feedback_enabled: true,
+ show_share_button: true,
show_post_title_section: true
};
postUrl = 'http://example.com';
@@ -1359,6 +1360,7 @@ describe('Email renderer', function () {
name: 'Test Newsletter',
show_badge: false,
feedback_enabled: true,
+ show_share_button: true,
show_post_title_section: true
});
const segment = null;
@@ -1379,6 +1381,7 @@ describe('Email renderer', function () {
name: 'Test Newsletter',
show_badge: false,
feedback_enabled: true,
+ show_share_button: true,
show_post_title_section: true
});
const segment = null;
@@ -1418,6 +1421,79 @@ describe('Email renderer', function () {
assert(response.html.includes('http://feedback-link.com/?score=0'));
});
+ it('includes share links for public posts', async function () {
+ const post = createModel(basePost);
+ const newsletter = createModel({
+ header_image: null,
+ name: 'Test Newsletter',
+ show_badge: false,
+ feedback_enabled: true,
+ show_share_button: true,
+ show_post_title_section: true
+ });
+ const segment = null;
+ const options = {};
+
+ const response = await emailRenderer.renderBody(
+ post,
+ newsletter,
+ segment,
+ options
+ );
+
+ assert(response.html.includes('href="http://example.com/#/share"'));
+ assert(response.html.includes('>Share'));
+ });
+
+ it('does not include share links for non-public posts', async function () {
+ const post = createModel({
+ ...basePost,
+ visibility: 'members'
+ });
+ const newsletter = createModel({
+ header_image: null,
+ name: 'Test Newsletter',
+ show_badge: false,
+ feedback_enabled: true,
+ show_share_button: true,
+ show_post_title_section: true
+ });
+ const segment = null;
+ const options = {};
+
+ const response = await emailRenderer.renderBody(
+ post,
+ newsletter,
+ segment,
+ options
+ );
+
+ assert(!response.html.includes('#/share'));
+ });
+
+ it('does not include share links when disabled in newsletter settings', async function () {
+ const post = createModel(basePost);
+ const newsletter = createModel({
+ header_image: null,
+ name: 'Test Newsletter',
+ show_badge: false,
+ feedback_enabled: true,
+ show_share_button: false,
+ show_post_title_section: true
+ });
+ const segment = null;
+ const options = {};
+
+ const response = await emailRenderer.renderBody(
+ post,
+ newsletter,
+ segment,
+ options
+ );
+
+ assert(!response.html.includes('#/share'));
+ });
+
it('uses custom excerpt as preheader', async function () {
const post = createModel({...basePost, custom_excerpt: 'Custom excerpt'});
const newsletter = createModel({
@@ -1699,6 +1775,7 @@ describe('Email renderer', function () {
name: 'Test Newsletter',
show_badge: true,
feedback_enabled: true,
+ show_share_button: true,
show_post_title_section: true
});
const segment = null;
@@ -1748,6 +1825,7 @@ describe('Email renderer', function () {
'#',
`http://feedback-link.com/?score=1&uuid=%%{uuid}%%&key=%%{key}%%`,
`http://feedback-link.com/?score=0&uuid=%%{uuid}%%&key=%%{key}%%`,
+ `http://tracked-link.com/?m=%%{uuid}%%&url=http%3A%2F%2Fexample.com%2F%3Fsource_tracking%3DTest%2BNewsletter%26post_tracking%3Dadded%23%2Fshare`,
`%%{unsubscribe_url}%%`,
`https://ghost.org/?via=pbg-newsletter&source_tracking=site`
]);
@@ -1770,6 +1848,7 @@ describe('Email renderer', function () {
name: 'Test Newsletter',
show_badge: true,
feedback_enabled: true,
+ show_share_button: true,
show_post_title_section: true
});
const segment = null;
@@ -1803,6 +1882,7 @@ describe('Email renderer', function () {
'#',
'http://feedback-link.com/?score=1&uuid=%%{uuid}%%&key=%%{key}%%',
'http://feedback-link.com/?score=0&uuid=%%{uuid}%%&key=%%{key}%%',
+ 'http://example.com/#/share',
'%%{unsubscribe_url}%%',
'https://ghost.org/?via=pbg-newsletter'
]);
@@ -1815,6 +1895,7 @@ describe('Email renderer', function () {
name: 'Test Newsletter',
show_badge: true,
feedback_enabled: true,
+ show_share_button: true,
show_post_title_section: true
});
const segment = null;
@@ -1858,6 +1939,7 @@ describe('Email renderer', function () {
`http://tracked-link.com/?m=%%{uuid}%%&url=https%3A%2F%2Fexample.com%2F%3Fref%3D123%26source_tracking%3DTest%2BNewsletter%26post_tracking%3Dadded`,
`http://feedback-link.com/?score=1&uuid=%%{uuid}%%&key=%%{key}%%`,
`http://feedback-link.com/?score=0&uuid=%%{uuid}%%&key=%%{key}%%`,
+ `http://tracked-link.com/?m=%%{uuid}%%&url=http%3A%2F%2Fexample.com%2F%3Fsource_tracking%3DTest%2BNewsletter%26post_tracking%3Dadded%23%2Fshare`,
`%%{unsubscribe_url}%%`,
`https://ghost.org/?via=pbg-newsletter&source_tracking=site`
]);
@@ -2485,6 +2567,70 @@ describe('Email renderer', function () {
assert.equal(data.post.publishedAt, '1 Jan 1970');
});
+ it('includes share URL for public posts', async function () {
+ const html = '';
+ const post = createModel({
+ posts_meta: createModel({}),
+ loaded: ['posts_meta'],
+ visibility: 'public'
+ });
+ const newsletter = createModel({
+ show_share_button: true
+ });
+ const data = await emailRenderer.getTemplateData({post, newsletter, html, addPaywall: false});
+ assert.equal(data.post.shareUrl, 'http://example.com/#/share');
+ });
+
+ it('calculates footer feedback button widths based on visible actions', async function () {
+ settings.comments_enabled = 'all';
+ const html = '';
+ const post = createModel({
+ posts_meta: createModel({}),
+ loaded: ['posts_meta'],
+ visibility: 'public'
+ });
+ const newsletter = createModel({
+ feedback_enabled: true,
+ show_comment_cta: true,
+ show_share_button: true
+ });
+
+ const data = await emailRenderer.getTemplateData({post, newsletter, html, addPaywall: false});
+ assert.equal(data.feedbackButtonCellWidth, '25%');
+ });
+
+ it('does not include share URL when the newsletter share button is disabled', async function () {
+ const html = '';
+ const post = createModel({
+ posts_meta: createModel({}),
+ loaded: ['posts_meta'],
+ visibility: 'public'
+ });
+ const newsletter = createModel({
+ show_share_button: false
+ });
+
+ const data = await emailRenderer.getTemplateData({post, newsletter, html, addPaywall: false});
+ assert.equal(data.post.shareUrl, null);
+ });
+
+ it('does not include share URL for non-public posts', async function () {
+ const html = '';
+ const newsletter = createModel({
+ show_share_button: true
+ });
+
+ for (const visibility of ['members', 'paid', 'tiers']) {
+ const post = createModel({
+ posts_meta: createModel({}),
+ loaded: ['posts_meta'],
+ visibility
+ });
+ const data = await emailRenderer.getTemplateData({post, newsletter, html, addPaywall: false});
+ assert.equal(data.post.shareUrl, null, `Expected no share URL for "${visibility}" visibility`);
+ }
+ });
+
it('show feature image if post has feature image', async function () {
const html = '';
const post = createModel({
diff --git a/ghost/core/test/unit/server/services/gifts/gift-email-service.test.js b/ghost/core/test/unit/server/services/gifts/gift-email-service.test.js
index ba2f3fbdf10..09cb8f3c19d 100644
--- a/ghost/core/test/unit/server/services/gifts/gift-email-service.test.js
+++ b/ghost/core/test/unit/server/services/gifts/gift-email-service.test.js
@@ -93,6 +93,24 @@ describe('GiftEmailService', function () {
sinon.assert.calledWith(mailer.send, sinon.match.has('html', sinon.match('1 month')));
});
+ it('includes a mailto link with prefilled subject and body in the HTML', async function () {
+ await service.sendPurchaseConfirmation(defaultData);
+
+ const msg = mailer.send.getCall(0).args[0];
+
+ // Handlebars HTML-escapes some characters (including `=` → `=`) when
+ // interpolating into an attribute. The browser decodes these back when the
+ // user clicks the link, so we don't care about the encoding here — we just
+ // verify the link is a mailto and that the encoded subject and body are
+ // present in the rendered output.
+ const expectedSubject = encodeURIComponent('I got you a gift subscription to Test Site');
+ const expectedBody = encodeURIComponent('Hi,\n\nI bought you a subscription to Test Site. You can redeem it here:\n\nhttps://example.com/gift/abc-123');
+
+ sinon.assert.match(msg.html, sinon.match('mailto:'));
+ sinon.assert.match(msg.html, sinon.match(expectedSubject));
+ sinon.assert.match(msg.html, sinon.match(expectedBody));
+ });
+
it('falls back to site domain when site title is undefined', async function () {
const noTitleSettingsCache = {
get: (key) => {
diff --git a/ghost/core/test/unit/server/services/gifts/gift-service.test.ts b/ghost/core/test/unit/server/services/gifts/gift-service.test.ts
index cbb340cec1b..f6fb5ec6cad 100644
--- a/ghost/core/test/unit/server/services/gifts/gift-service.test.ts
+++ b/ghost/core/test/unit/server/services/gifts/gift-service.test.ts
@@ -224,6 +224,23 @@ describe('GiftService', function () {
assert.equal(emailData.memberId, 'member_1');
assert.equal(emailData.amount, 5000);
assert.equal(emailData.currency, 'usd');
+ assert.equal(emailData.tierName, 'Bronze');
+ assert.equal(emailData.cadence, 'year');
+ assert.equal(emailData.duration, 1);
+ });
+
+ it('throws when tier is not found', async function () {
+ tiersService.api.read.resolves(null);
+
+ const service = createService();
+
+ await assert.rejects(
+ () => service.recordPurchase(purchaseData),
+ {message: 'Tier not found: tier_1'}
+ );
+
+ sinon.assert.notCalled(staffServiceEmails.notifyGiftReceived);
+ sinon.assert.notCalled(giftEmailService.sendPurchaseConfirmation);
});
it('uses buyerEmail and null name when buyer is not a member', async function () {
@@ -261,17 +278,6 @@ describe('GiftService', function () {
assert.ok(emailData.expiresAt instanceof Date);
});
- it('does not send confirmation email when tier is not found', async function () {
- tiersService.api.read.resolves(null);
-
- const service = createService();
-
- const result = await service.recordPurchase(purchaseData);
-
- assert.equal(result, true);
- sinon.assert.notCalled(giftEmailService.sendPurchaseConfirmation);
- });
-
it('does not fail purchase when buyer confirmation email throws', async function () {
giftEmailService.sendPurchaseConfirmation.rejects(new Error('SMTP error'));
diff --git a/ghost/core/test/unit/server/services/gifts/gift.test.ts b/ghost/core/test/unit/server/services/gifts/gift.test.ts
index ae952b91e73..8fbff87200d 100644
--- a/ghost/core/test/unit/server/services/gifts/gift.test.ts
+++ b/ghost/core/test/unit/server/services/gifts/gift.test.ts
@@ -35,7 +35,7 @@ describe('Gift', function () {
it('sets expiresAt to GIFT_EXPIRY_DAYS after purchasedAt', function () {
const gift = Gift.fromPurchase(purchaseData);
const daysDiff = Math.round(
- (gift.expiresAt!.getTime() - gift.purchasedAt.getTime()) / (1000 * 60 * 60 * 24)
+ (gift.expiresAt.getTime() - gift.purchasedAt.getTime()) / (1000 * 60 * 60 * 24)
);
assert.equal(daysDiff, GIFT_EXPIRY_DAYS);
diff --git a/ghost/core/test/unit/server/services/staff/staff-service.test.js b/ghost/core/test/unit/server/services/staff/staff-service.test.js
index afcd541dfd4..d7973d84dd8 100644
--- a/ghost/core/test/unit/server/services/staff/staff-service.test.js
+++ b/ghost/core/test/unit/server/services/staff/staff-service.test.js
@@ -981,7 +981,10 @@ describe('StaffService', function () {
email: 'alice@example.com',
memberId: null,
amount: 6000,
- currency: 'usd'
+ currency: 'usd',
+ tierName: 'Gold',
+ cadence: 'year',
+ duration: 1
});
sinon.assert.calledWith(getEmailAlertUsersStub, 'gift-purchased');
@@ -995,7 +998,10 @@ describe('StaffService', function () {
email: 'bob@example.com',
memberId: null,
amount: 1500,
- currency: 'eur'
+ currency: 'eur',
+ tierName: 'Gold',
+ cadence: 'year',
+ duration: 1
});
sinon.assert.calledOnce(mailStub);
@@ -1008,7 +1014,10 @@ describe('StaffService', function () {
email: 'charlie@example.com',
memberId: null,
amount: 5000,
- currency: 'usd'
+ currency: 'usd',
+ tierName: 'Gold',
+ cadence: 'year',
+ duration: 1
});
sinon.assert.calledOnce(mailStub);
@@ -1021,7 +1030,10 @@ describe('StaffService', function () {
email: 'diana@example.com',
memberId: null,
amount: 2000,
- currency: 'gbp'
+ currency: 'gbp',
+ tierName: 'Gold',
+ cadence: 'year',
+ duration: 1
});
sinon.assert.calledOnce(mailStub);
@@ -1034,12 +1046,48 @@ describe('StaffService', function () {
email: 'anon@example.com',
memberId: null,
amount: 3000,
- currency: 'usd'
+ currency: 'usd',
+ tierName: 'Gold',
+ cadence: 'year',
+ duration: 1
});
sinon.assert.calledOnce(mailStub);
sinon.assert.calledWith(mailStub, sinon.match.has('subject', sinon.match('from anon@example.com')));
});
+
+ it('includes tier and cadence in HTML when provided', async function () {
+ await service.emails.notifyGiftReceived({
+ name: 'Erin',
+ email: 'erin@example.com',
+ memberId: null,
+ amount: 12000,
+ currency: 'usd',
+ tierName: 'Premium',
+ cadence: 'year',
+ duration: 1
+ });
+
+ sinon.assert.calledOnce(mailStub);
+ sinon.assert.calledWith(mailStub, sinon.match.has('html', sinon.match('Premium')));
+ sinon.assert.calledWith(mailStub, sinon.match.has('html', sinon.match('1 year')));
+ });
+
+ it('formats cadence with pluralized unit when duration is greater than 1', async function () {
+ await service.emails.notifyGiftReceived({
+ name: 'Erin',
+ email: 'erin@example.com',
+ memberId: null,
+ amount: 12000,
+ currency: 'usd',
+ tierName: 'Premium',
+ cadence: 'month',
+ duration: 3
+ });
+
+ sinon.assert.calledOnce(mailStub);
+ sinon.assert.calledWith(mailStub, sinon.match.has('html', sinon.match('3 months')));
+ });
});
});
});
diff --git a/ghost/i18n/locales/af/ghost.json b/ghost/i18n/locales/af/ghost.json
index 08008867a3d..cd5577ca69c 100644
--- a/ghost/i18n/locales/af/ghost.json
+++ b/ghost/i18n/locales/af/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Veilige aanmeldskakel vir {siteTitle}",
"See you soon!": "Sien u binnekort weer!",
"Sent to {email}": "Gestuur na {email}",
+ "Share": "",
"Sign in": "Meld aan",
"Sign in now": "",
"Sign in to {siteTitle}": "Meld aan by {siteTitle}",
diff --git a/ghost/i18n/locales/ar/ghost.json b/ghost/i18n/locales/ar/ghost.json
index 71fee3feae7..62c71b716f2 100644
--- a/ghost/i18n/locales/ar/ghost.json
+++ b/ghost/i18n/locales/ar/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "رابط تسجيل الدخول الامن الى {siteTitle}",
"See you soon!": "نراكم قريبا!",
"Sent to {email}": "تم الارسال الى {email}",
+ "Share": "",
"Sign in": "تسجيل الدخول",
"Sign in now": "",
"Sign in to {siteTitle}": "تسجيل الدخول الى {siteTitle}",
diff --git a/ghost/i18n/locales/bg/ghost.json b/ghost/i18n/locales/bg/ghost.json
index 0d56f8cf8b6..c7115b1c334 100644
--- a/ghost/i18n/locales/bg/ghost.json
+++ b/ghost/i18n/locales/bg/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Линк за сигурно влизане в сайта {siteTitle}",
"See you soon!": "До скоро!",
"Sent to {email}": "Изпратено до {email}",
+ "Share": "",
"Sign in": "Вход",
"Sign in now": "Влезте сега",
"Sign in to {siteTitle}": "Влезте в {siteTitle}",
diff --git a/ghost/i18n/locales/bn/ghost.json b/ghost/i18n/locales/bn/ghost.json
index d13b3919897..6c96c625698 100644
--- a/ghost/i18n/locales/bn/ghost.json
+++ b/ghost/i18n/locales/bn/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} এর জন্য নিরাপদ সাইন ইন লিঙ্ক",
"See you soon!": "শীঘ্রই দেখা হবে!",
"Sent to {email}": "{email} এ পাঠানো হয়েছে",
+ "Share": "",
"Sign in": "সাইন ইন করুন",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle} এ সাইন ইন করুন",
diff --git a/ghost/i18n/locales/bs/ghost.json b/ghost/i18n/locales/bs/ghost.json
index e5da83ce941..4e1c4687f81 100644
--- a/ghost/i18n/locales/bs/ghost.json
+++ b/ghost/i18n/locales/bs/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Siguran link za prijavu za {siteTitle}",
"See you soon!": "Vidimo se uskoro!",
"Sent to {email}": "Poslano na {email}",
+ "Share": "",
"Sign in": "Prijavi se",
"Sign in now": "",
"Sign in to {siteTitle}": "Prijavi se na {siteTitle}",
diff --git a/ghost/i18n/locales/ca/ghost.json b/ghost/i18n/locales/ca/ghost.json
index d54e32e0106..1ee63a50e28 100644
--- a/ghost/i18n/locales/ca/ghost.json
+++ b/ghost/i18n/locales/ca/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Enllaç segur d'inici de sessió per {siteTitle}",
"See you soon!": "A reveure!",
"Sent to {email}": "Enviat a {email}",
+ "Share": "",
"Sign in": "Inicia sessió",
"Sign in now": "",
"Sign in to {siteTitle}": "Inicia sessió a {siteTitle}",
diff --git a/ghost/i18n/locales/context.json b/ghost/i18n/locales/context.json
index a4d9f40f2b7..777ff61eb16 100644
--- a/ghost/i18n/locales/context.json
+++ b/ghost/i18n/locales/context.json
@@ -245,7 +245,7 @@
"Sending...": "A loading status message when an email is being sent",
"Sent": "Button text when a comment was reported succesfully",
"Sent to {email}": "Magic link email footer",
- "Share": "Title of Portal share modal for sharing a post",
+ "Share": "Title of Portal share modal for sharing a post, and label for the newsletter email footer Share button text passed as buttonText to the feedbackButton partial",
"Show": "Context menu action for a comment, for administrators - smaller devices",
"Show 1 more reply": "Button text to load the last remaining reply for a comment",
"Show all": "Show all recommendations",
diff --git a/ghost/i18n/locales/cs/ghost.json b/ghost/i18n/locales/cs/ghost.json
index 6ceea7e3edb..e62ae78221d 100644
--- a/ghost/i18n/locales/cs/ghost.json
+++ b/ghost/i18n/locales/cs/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Bezpečný přihlašovací odkaz pro {siteTitle}",
"See you soon!": "Na viděnou!",
"Sent to {email}": "Odesláno na {email}",
+ "Share": "",
"Sign in": "Přihlásit se",
"Sign in now": "",
"Sign in to {siteTitle}": "Přihlásit se k {siteTitle}",
diff --git a/ghost/i18n/locales/da/ghost.json b/ghost/i18n/locales/da/ghost.json
index 00ab9881ad7..763085e2092 100644
--- a/ghost/i18n/locales/da/ghost.json
+++ b/ghost/i18n/locales/da/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Sikker log ind link til {siteTitle}",
"See you soon!": "Vi ses om lidt!",
"Sent to {email}": "Sendt til {email}",
+ "Share": "",
"Sign in": "Log ind",
"Sign in now": "",
"Sign in to {siteTitle}": "Log ind hos {siteTitle}",
diff --git a/ghost/i18n/locales/de-CH/ghost.json b/ghost/i18n/locales/de-CH/ghost.json
index 2da0bd8948c..dd1a2529aa3 100644
--- a/ghost/i18n/locales/de-CH/ghost.json
+++ b/ghost/i18n/locales/de-CH/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Sicherer Anmeldelink für unsere Seite «{siteTitle}»",
"See you soon!": "Bis bald!",
"Sent to {email}": "Gesendet an {email}",
+ "Share": "",
"Sign in": "Einloggen",
"Sign in now": "Jetzt einloggen",
"Sign in to {siteTitle}": "Bei «{siteTitle}» einloggen",
diff --git a/ghost/i18n/locales/de/ghost.json b/ghost/i18n/locales/de/ghost.json
index 511b1316f8d..fd7a450854d 100644
--- a/ghost/i18n/locales/de/ghost.json
+++ b/ghost/i18n/locales/de/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Sicherer Anmeldelink für {siteTitle}",
"See you soon!": "Bis bald!",
"Sent to {email}": "Gesendet an {email}",
+ "Share": "",
"Sign in": "Einloggen",
"Sign in now": "Jetzt einloggen",
"Sign in to {siteTitle}": "Bei {siteTitle} einloggen",
diff --git a/ghost/i18n/locales/el/ghost.json b/ghost/i18n/locales/el/ghost.json
index 304fef490e7..73b43fabde9 100644
--- a/ghost/i18n/locales/el/ghost.json
+++ b/ghost/i18n/locales/el/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Ασφαλής σύνδεσμος σύνδεσης για το {siteTitle}",
"See you soon!": "Τα λέμε σύντομα!",
"Sent to {email}": "Απεστάλη στο {email}",
+ "Share": "",
"Sign in": "Σύνδεση",
"Sign in now": "",
"Sign in to {siteTitle}": "Συνδεθείτε στο {siteTitle}",
diff --git a/ghost/i18n/locales/en/ghost.json b/ghost/i18n/locales/en/ghost.json
index ca41a4bce9b..9c1cbc8560a 100644
--- a/ghost/i18n/locales/en/ghost.json
+++ b/ghost/i18n/locales/en/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "",
"See you soon!": "",
"Sent to {email}": "",
+ "Share": "",
"Sign in": "",
"Sign in now": "",
"Sign in to {siteTitle}": "",
diff --git a/ghost/i18n/locales/eo/ghost.json b/ghost/i18n/locales/eo/ghost.json
index 98c265f9b50..3654469d82c 100644
--- a/ghost/i18n/locales/eo/ghost.json
+++ b/ghost/i18n/locales/eo/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Sekura ensaluta ligilo por {siteTitle}",
"See you soon!": "Ĝis baldaŭ!",
"Sent to {email}": "Sendita al {email}",
+ "Share": "",
"Sign in": "",
"Sign in now": "",
"Sign in to {siteTitle}": "Ensalutu al {siteTitle}",
diff --git a/ghost/i18n/locales/es/ghost.json b/ghost/i18n/locales/es/ghost.json
index 75f4027cc47..4226b52311d 100644
--- a/ghost/i18n/locales/es/ghost.json
+++ b/ghost/i18n/locales/es/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Inicio de sesión seguro para {siteTitle}",
"See you soon!": "¡Hasta pronto!",
"Sent to {email}": "Enviado a {email}",
+ "Share": "",
"Sign in": "Iniciar sesión",
"Sign in now": "",
"Sign in to {siteTitle}": "Iniciar sesión en {siteTitle}",
diff --git a/ghost/i18n/locales/et/ghost.json b/ghost/i18n/locales/et/ghost.json
index a5a3e68f1e6..acde5ab04e2 100644
--- a/ghost/i18n/locales/et/ghost.json
+++ b/ghost/i18n/locales/et/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Turvaline sisselogimislink {siteTitle} lehele",
"See you soon!": "Kohtumiseni!",
"Sent to {email}": "Saadetud aadressile {email}",
+ "Share": "",
"Sign in": "Logi sisse",
"Sign in now": "",
"Sign in to {siteTitle}": "Logi sisse {siteTitle} lehele",
diff --git a/ghost/i18n/locales/eu/ghost.json b/ghost/i18n/locales/eu/ghost.json
index 09f9562c8b0..3b115c550ef 100644
--- a/ghost/i18n/locales/eu/ghost.json
+++ b/ghost/i18n/locales/eu/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle}(e)n saioa hasteko esteka segurua",
"See you soon!": "Laster arte!",
"Sent to {email}": "{email}(r)i bidali zaio",
+ "Share": "",
"Sign in": "Hasi saioa",
"Sign in now": "",
"Sign in to {siteTitle}": "Hasi saioa {siteTitle}(e)n",
diff --git a/ghost/i18n/locales/fa/ghost.json b/ghost/i18n/locales/fa/ghost.json
index 542f051bb6c..2fe27863434 100644
--- a/ghost/i18n/locales/fa/ghost.json
+++ b/ghost/i18n/locales/fa/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "پیوند امن ورود به وب\u200cسایت {siteTitle}",
"See you soon!": "به زودی می\u200cبینمت!",
"Sent to {email}": "ارسال شده به {email} ",
+ "Share": "",
"Sign in": "ورود",
"Sign in now": "",
"Sign in to {siteTitle}": "ورود به وب\u200cسایت {siteTitle}",
diff --git a/ghost/i18n/locales/fi/ghost.json b/ghost/i18n/locales/fi/ghost.json
index 7f3c30ff513..9b592f5082c 100644
--- a/ghost/i18n/locales/fi/ghost.json
+++ b/ghost/i18n/locales/fi/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Turvallinen kirjautumislinkki sivustolle {siteTitle}",
"See you soon!": "Nähdään pian!",
"Sent to {email}": "Lähetetty {email}",
+ "Share": "",
"Sign in": "Kirjaudu sisään",
"Sign in now": "Kirjaudu nyt sisään",
"Sign in to {siteTitle}": "Kirjaudu sisään sivulle {siteTitle}",
diff --git a/ghost/i18n/locales/fr/ghost.json b/ghost/i18n/locales/fr/ghost.json
index 1136c12832e..6da26d8cf10 100644
--- a/ghost/i18n/locales/fr/ghost.json
+++ b/ghost/i18n/locales/fr/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Lien sécurisé de connexion pour {siteTitle}",
"See you soon!": "À bientôt !",
"Sent to {email}": "Envoyé à {email}",
+ "Share": "",
"Sign in": "Se connecter",
"Sign in now": "Connectez-vous",
"Sign in to {siteTitle}": "Se connecter à {siteTitle}",
diff --git a/ghost/i18n/locales/gd/ghost.json b/ghost/i18n/locales/gd/ghost.json
index 0d1c336e7eb..63fef0c84ee 100644
--- a/ghost/i18n/locales/gd/ghost.json
+++ b/ghost/i18n/locales/gd/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Ceangal tèarainte airson clàradh a-steach ris an làrach-lìn, {siteTitle}",
"See you soon!": "Tìoraidh an-dràsta!",
"Sent to {email}": "Cuir gu {email}",
+ "Share": "",
"Sign in": "Clàraich a-steach",
"Sign in now": "",
"Sign in to {siteTitle}": "Clàraich a-steach dhan làrach-lìn, {siteTitle}",
diff --git a/ghost/i18n/locales/he/ghost.json b/ghost/i18n/locales/he/ghost.json
index a7966163c7b..1b821b67a0a 100644
--- a/ghost/i18n/locales/he/ghost.json
+++ b/ghost/i18n/locales/he/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "לינק הרשמה מאובטח ל{siteTitle}",
"See you soon!": "להתראות בקרוב!",
"Sent to {email}": "נשלח אל {email}",
+ "Share": "",
"Sign in": "כניסה",
"Sign in now": "",
"Sign in to {siteTitle}": "כנסו אל {siteTitle}",
diff --git a/ghost/i18n/locales/hi/ghost.json b/ghost/i18n/locales/hi/ghost.json
index f941eb4e55c..4554dd4d729 100644
--- a/ghost/i18n/locales/hi/ghost.json
+++ b/ghost/i18n/locales/hi/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} के लिए सुरक्षित साइन इन लिंक",
"See you soon!": "जल्द ही मिलते हैं!",
"Sent to {email}": "{email} पर भेजा गया",
+ "Share": "",
"Sign in": "साइन इन करें",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle} में साइन इन करें",
diff --git a/ghost/i18n/locales/hr/ghost.json b/ghost/i18n/locales/hr/ghost.json
index c03ddeaed52..e9d5eb7e85f 100644
--- a/ghost/i18n/locales/hr/ghost.json
+++ b/ghost/i18n/locales/hr/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Sigurni link za prijavu na {siteTitle}",
"See you soon!": "Vidimo se uskoro!",
"Sent to {email}": "Poslano na {email}",
+ "Share": "",
"Sign in": "Prijava",
"Sign in now": "",
"Sign in to {siteTitle}": "Prijava na {siteTitle}",
diff --git a/ghost/i18n/locales/hu/ghost.json b/ghost/i18n/locales/hu/ghost.json
index 0957097182e..0419a08d69b 100644
--- a/ghost/i18n/locales/hu/ghost.json
+++ b/ghost/i18n/locales/hu/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} — Biztonságos bejelentkezési link",
"See you soon!": "Üdv!",
"Sent to {email}": "Elküldve ide: {email}",
+ "Share": "",
"Sign in": "Bejelentkezés",
"Sign in now": "",
"Sign in to {siteTitle}": "Bejelentkezem ide: {siteTitle}",
diff --git a/ghost/i18n/locales/id/ghost.json b/ghost/i18n/locales/id/ghost.json
index 2ee7841b065..7742a59d45c 100644
--- a/ghost/i18n/locales/id/ghost.json
+++ b/ghost/i18n/locales/id/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Tautan masuk yang aman untuk {siteTitle}",
"See you soon!": "Sampai jumpa lagi!",
"Sent to {email}": "Dikirim ke {email}",
+ "Share": "",
"Sign in": "Masuk",
"Sign in now": "",
"Sign in to {siteTitle}": "Masuk ke {siteTitle}",
diff --git a/ghost/i18n/locales/is/ghost.json b/ghost/i18n/locales/is/ghost.json
index df0090d3a53..73f1225f54c 100644
--- a/ghost/i18n/locales/is/ghost.json
+++ b/ghost/i18n/locales/is/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Innskráningarhlekkur fyrir {siteTitle}",
"See you soon!": "Sjáumst von bráðar!",
"Sent to {email}": "Senda til {email}",
+ "Share": "",
"Sign in": "Innskráning",
"Sign in now": "",
"Sign in to {siteTitle}": "Innskráning á {siteTitle}",
diff --git a/ghost/i18n/locales/it/ghost.json b/ghost/i18n/locales/it/ghost.json
index f932c6317d1..b4d1e395f96 100644
--- a/ghost/i18n/locales/it/ghost.json
+++ b/ghost/i18n/locales/it/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Link per l'accesso sicuro a {siteTitle}",
"See you soon!": "A presto!",
"Sent to {email}": "Inviata a {email}",
+ "Share": "",
"Sign in": "Accedi",
"Sign in now": "Accedi ora",
"Sign in to {siteTitle}": "Accedi a {siteTitle}",
diff --git a/ghost/i18n/locales/ja/ghost.json b/ghost/i18n/locales/ja/ghost.json
index 3e7f7d7b4de..4e02194134a 100644
--- a/ghost/i18n/locales/ja/ghost.json
+++ b/ghost/i18n/locales/ja/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle}へのログインリンクです",
"See you soon!": "引き続きよろしくお願いします。",
"Sent to {email}": "{email}に送信",
+ "Share": "",
"Sign in": "ログイン",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle}にログイン",
diff --git a/ghost/i18n/locales/ko/ghost.json b/ghost/i18n/locales/ko/ghost.json
index 87cdfdc2153..39d7667112e 100644
--- a/ghost/i18n/locales/ko/ghost.json
+++ b/ghost/i18n/locales/ko/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle}의 안전한 로그인 링크예요.",
"See you soon!": "곧 다시 만나요!",
"Sent to {email}": "{email}으로 전송되었어요.",
+ "Share": "",
"Sign in": "로그인",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle}에 로그인 해주세요.",
diff --git a/ghost/i18n/locales/kz/ghost.json b/ghost/i18n/locales/kz/ghost.json
index f693d841075..17aff2e9330 100644
--- a/ghost/i18n/locales/kz/ghost.json
+++ b/ghost/i18n/locales/kz/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} сайтына қауіпсіз кіруге арналған сілтеме",
"See you soon!": "Көріскенше!",
"Sent to {email}": "{email} поштасына жіберілді",
+ "Share": "",
"Sign in": "Кіру",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle} сайтына кіру",
diff --git a/ghost/i18n/locales/lt/ghost.json b/ghost/i18n/locales/lt/ghost.json
index b0e0fff402a..3eef0004d2d 100644
--- a/ghost/i18n/locales/lt/ghost.json
+++ b/ghost/i18n/locales/lt/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Saugi prisijungimo nuoroda į {siteTitle}",
"See you soon!": "Iki pasimatymo!",
"Sent to {email}": "Išsiųsta į {email}",
+ "Share": "",
"Sign in": "Prisijungti",
"Sign in now": "",
"Sign in to {siteTitle}": "Prisijungti prie {siteTitle}",
diff --git a/ghost/i18n/locales/lv/ghost.json b/ghost/i18n/locales/lv/ghost.json
index 586c9d27dc7..f23d771f810 100644
--- a/ghost/i18n/locales/lv/ghost.json
+++ b/ghost/i18n/locales/lv/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Droša pierakstīšanās saite vietnei {siteTitle}",
"See you soon!": "Uz drīzu tikšanos!",
"Sent to {email}": "Nosūtīts uz {email}",
+ "Share": "",
"Sign in": "Pierakstīties",
"Sign in now": "",
"Sign in to {siteTitle}": "Pierakstieties vietnē {siteTitle}",
diff --git a/ghost/i18n/locales/mk/ghost.json b/ghost/i18n/locales/mk/ghost.json
index 2465a2f7b33..bb53fb9ce08 100644
--- a/ghost/i18n/locales/mk/ghost.json
+++ b/ghost/i18n/locales/mk/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Безбеден линк за најава на {siteTitle}",
"See you soon!": "Ќе се видиме наскоро!",
"Sent to {email}": "Испратете на {email}",
+ "Share": "",
"Sign in": "Најава",
"Sign in now": "",
"Sign in to {siteTitle}": "Најавете се на {siteTitle}",
diff --git a/ghost/i18n/locales/mn/ghost.json b/ghost/i18n/locales/mn/ghost.json
index 8035f5c3ff2..5722ba5b137 100644
--- a/ghost/i18n/locales/mn/ghost.json
+++ b/ghost/i18n/locales/mn/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle}-д нэвтрэх нууцлал бүхий холбоос",
"See you soon!": "Удахгүй уулзацгаая!",
"Sent to {email}": "{email} хаяг руу илгээлээ",
+ "Share": "",
"Sign in": "Нэвтрэх",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle}-д нэвтрэх",
diff --git a/ghost/i18n/locales/ms/ghost.json b/ghost/i18n/locales/ms/ghost.json
index 08f081c1edc..48959c87012 100644
--- a/ghost/i18n/locales/ms/ghost.json
+++ b/ghost/i18n/locales/ms/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Pautan log masuk untuk {siteTitle}",
"See you soon!": "Jumpa lagi!",
"Sent to {email}": "Dihantar ke {email}",
+ "Share": "",
"Sign in": "Log masuk",
"Sign in now": "",
"Sign in to {siteTitle}": "Log masuk ke {siteTitle}",
diff --git a/ghost/i18n/locales/nb/ghost.json b/ghost/i18n/locales/nb/ghost.json
index bf508e623ef..cf110d2ae0e 100644
--- a/ghost/i18n/locales/nb/ghost.json
+++ b/ghost/i18n/locales/nb/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Sikker påloggingslenke for {siteTitle}",
"See you soon!": "Ser deg snart!",
"Sent to {email}": "Sendt til {email}",
+ "Share": "",
"Sign in": "Logg inn",
"Sign in now": "",
"Sign in to {siteTitle}": "Logg inn på {siteTitle}",
diff --git a/ghost/i18n/locales/ne/ghost.json b/ghost/i18n/locales/ne/ghost.json
index 011137cde72..dcae99d97d2 100644
--- a/ghost/i18n/locales/ne/ghost.json
+++ b/ghost/i18n/locales/ne/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} को लागि सुरक्षित साइन इन लिङ्क",
"See you soon!": "चाँडै भेटौँला!",
"Sent to {email}": "{email} मा पठाइयो",
+ "Share": "",
"Sign in": "साइन इन",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle} मा साइन इन गर्नुहोस्",
diff --git a/ghost/i18n/locales/nl/ghost.json b/ghost/i18n/locales/nl/ghost.json
index 8cb154973a7..ff4ba88c8cb 100644
--- a/ghost/i18n/locales/nl/ghost.json
+++ b/ghost/i18n/locales/nl/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Veilige inloglink voor {siteTitle}",
"See you soon!": "Tot snel!",
"Sent to {email}": "Verzonden naar {email}",
+ "Share": "",
"Sign in": "Inloggen",
"Sign in now": "",
"Sign in to {siteTitle}": "Inloggen op {siteTitle}",
diff --git a/ghost/i18n/locales/nn/ghost.json b/ghost/i18n/locales/nn/ghost.json
index 42b943e4e09..529aed8aeba 100644
--- a/ghost/i18n/locales/nn/ghost.json
+++ b/ghost/i18n/locales/nn/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Trygg innlogginslenke for {siteTitle}",
"See you soon!": "På gjensyn!",
"Sent to {email}": "Sendt til {email}",
+ "Share": "",
"Sign in": "Logg inn",
"Sign in now": "",
"Sign in to {siteTitle}": "Logg inn på {siteTitle}",
diff --git a/ghost/i18n/locales/pa/ghost.json b/ghost/i18n/locales/pa/ghost.json
index b07dd58b915..cf05181d705 100644
--- a/ghost/i18n/locales/pa/ghost.json
+++ b/ghost/i18n/locales/pa/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} ਲਈ ਸੁਰੱਖਿਅਤ ਸਾਈਨ-ਇਨ ਲਿੰਕ",
"See you soon!": "ਜਲਦੀ ਮਿਲਦੇ ਹਾਂ!",
"Sent to {email}": "{email} ਨੂੰ ਭੇਜਿਆ ਗਿਆ",
+ "Share": "",
"Sign in": "ਸਾਈਨ ਇਨ ਕਰੋ",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle} 'ਤੇ ਸਾਈਨ ਇਨ ਕਰੋ",
diff --git a/ghost/i18n/locales/pl/ghost.json b/ghost/i18n/locales/pl/ghost.json
index b6a1eba7e99..b31fa899b65 100644
--- a/ghost/i18n/locales/pl/ghost.json
+++ b/ghost/i18n/locales/pl/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Bezpieczny link logowania do {siteTitle}",
"See you soon!": "Do zobaczenia!",
"Sent to {email}": "Wysłano do {email}",
+ "Share": "",
"Sign in": "Zaloguj się",
"Sign in now": "",
"Sign in to {siteTitle}": "Zaloguj się do {siteTitle}",
diff --git a/ghost/i18n/locales/pt-BR/ghost.json b/ghost/i18n/locales/pt-BR/ghost.json
index 1b5972649aa..3d7e3abb5df 100644
--- a/ghost/i18n/locales/pt-BR/ghost.json
+++ b/ghost/i18n/locales/pt-BR/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Link seguro para acessar o site {siteTitle}",
"See you soon!": "Até logo!",
"Sent to {email}": "Enviado para {email}",
+ "Share": "",
"Sign in": "Entrar",
"Sign in now": "Entrar agora",
"Sign in to {siteTitle}": "Entrar no site {siteTitle}",
diff --git a/ghost/i18n/locales/pt/ghost.json b/ghost/i18n/locales/pt/ghost.json
index e0d1159a9fc..4a904108d07 100644
--- a/ghost/i18n/locales/pt/ghost.json
+++ b/ghost/i18n/locales/pt/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Ligação segura para entrar em {siteTitle}",
"See you soon!": "Até breve!",
"Sent to {email}": "Enviado para {email}",
+ "Share": "",
"Sign in": "Entrar",
"Sign in now": "",
"Sign in to {siteTitle}": "Entrar em {siteTitle}",
diff --git a/ghost/i18n/locales/ro/ghost.json b/ghost/i18n/locales/ro/ghost.json
index cd3973a9930..f11c92cb128 100644
--- a/ghost/i18n/locales/ro/ghost.json
+++ b/ghost/i18n/locales/ro/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Link securizat pentru autentificarea la {siteTitle}",
"See you soon!": "Pe curând!",
"Sent to {email}": "Trimis către {email}",
+ "Share": "",
"Sign in": "Autentificare",
"Sign in now": "",
"Sign in to {siteTitle}": "Conectează-te la {siteTitle}",
diff --git a/ghost/i18n/locales/ru/ghost.json b/ghost/i18n/locales/ru/ghost.json
index d447368e0a8..d048a06294b 100644
--- a/ghost/i18n/locales/ru/ghost.json
+++ b/ghost/i18n/locales/ru/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Ссылка для безопасного входа в систему на {siteTitle}",
"See you soon!": "До скорой встречи!",
"Sent to {email}": "Отправлено на {email}",
+ "Share": "",
"Sign in": "Войти",
"Sign in now": "Войти сейчас",
"Sign in to {siteTitle}": "Войти на {siteTitle}",
diff --git a/ghost/i18n/locales/si/ghost.json b/ghost/i18n/locales/si/ghost.json
index df33c9aefd9..e696519a9df 100644
--- a/ghost/i18n/locales/si/ghost.json
+++ b/ghost/i18n/locales/si/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} වෙත ආරක්ෂිතව sign in වීම සඳහා වන link එක",
"See you soon!": "ඉක්මණින් නැවත හමුවෙමු!",
"Sent to {email}": "{email} වෙත යවන ලදී",
+ "Share": "",
"Sign in": "Sign in වෙන්න",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle} වෙත sign in වෙන්න",
diff --git a/ghost/i18n/locales/sk/ghost.json b/ghost/i18n/locales/sk/ghost.json
index ce6ecff8790..16a81f91a47 100644
--- a/ghost/i18n/locales/sk/ghost.json
+++ b/ghost/i18n/locales/sk/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Bezpečný prihlasovací odkaz pre {siteTitle}",
"See you soon!": "Dovidenia!",
"Sent to {email}": "Odoslané na {email}",
+ "Share": "",
"Sign in": "Prihlásiť sa",
"Sign in now": "",
"Sign in to {siteTitle}": "Prihlásiť sa na {siteTitle}",
diff --git a/ghost/i18n/locales/sl/ghost.json b/ghost/i18n/locales/sl/ghost.json
index 201283d8023..b8220bf7676 100644
--- a/ghost/i18n/locales/sl/ghost.json
+++ b/ghost/i18n/locales/sl/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Varna povezava za prijavo na {siteTitle}",
"See you soon!": "Se vidimo kmalu!",
"Sent to {email}": "Poslano na {email}",
+ "Share": "",
"Sign in": "Prijavite se",
"Sign in now": "",
"Sign in to {siteTitle}": "Prijava v {siteTitle}",
diff --git a/ghost/i18n/locales/sq/ghost.json b/ghost/i18n/locales/sq/ghost.json
index 22db64d01d2..1608022e64b 100644
--- a/ghost/i18n/locales/sq/ghost.json
+++ b/ghost/i18n/locales/sq/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Lidhja e sigurt e hyrjes për {siteTitle}",
"See you soon!": "Shihemi se shpejti!",
"Sent to {email}": "Derguar tek {email}",
+ "Share": "",
"Sign in": "Hyr",
"Sign in now": "",
"Sign in to {siteTitle}": "Hyr ne",
diff --git a/ghost/i18n/locales/sr-Cyrl/ghost.json b/ghost/i18n/locales/sr-Cyrl/ghost.json
index bfdd4851157..a5ff1ba1bdd 100644
--- a/ghost/i18n/locales/sr-Cyrl/ghost.json
+++ b/ghost/i18n/locales/sr-Cyrl/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Сигуран линк за пријаву на {siteTitle}",
"See you soon!": "Видимо се ускоро!",
"Sent to {email}": "Послато на {email}",
+ "Share": "",
"Sign in": "Пријавите се",
"Sign in now": "Пријавите се сада",
"Sign in to {siteTitle}": "Пријавите се на {siteTitle}",
diff --git a/ghost/i18n/locales/sr/ghost.json b/ghost/i18n/locales/sr/ghost.json
index 84e4e0000a3..e806ea25276 100644
--- a/ghost/i18n/locales/sr/ghost.json
+++ b/ghost/i18n/locales/sr/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Siguran link za prijavu na {siteTitle}",
"See you soon!": "Vidimo se uskoro!",
"Sent to {email}": "Poslato na {email}",
+ "Share": "",
"Sign in": "Prijavite se",
"Sign in now": "Prijavite se sada",
"Sign in to {siteTitle}": "Prijavite se na {siteTitle}",
diff --git a/ghost/i18n/locales/sv/ghost.json b/ghost/i18n/locales/sv/ghost.json
index 33ffc91db13..ba07f65dee7 100644
--- a/ghost/i18n/locales/sv/ghost.json
+++ b/ghost/i18n/locales/sv/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Säker inloggningslänk för {siteTitle}",
"See you soon!": "Vi ses snart!",
"Sent to {email}": "Skickat till {email}",
+ "Share": "",
"Sign in": "Logga in",
"Sign in now": "Logga in nu",
"Sign in to {siteTitle}": "Logga in på {siteTitle}",
diff --git a/ghost/i18n/locales/sw/ghost.json b/ghost/i18n/locales/sw/ghost.json
index 4b875fdcf38..463a18d6adf 100644
--- a/ghost/i18n/locales/sw/ghost.json
+++ b/ghost/i18n/locales/sw/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Kiungo salama cha kuingia kwa {siteTitle}",
"See you soon!": "Tutaonana hivi karibuni!",
"Sent to {email}": "Imetumwa kwa {email}",
+ "Share": "",
"Sign in": "Ingia",
"Sign in now": "",
"Sign in to {siteTitle}": "Ingia kwa {siteTitle}",
diff --git a/ghost/i18n/locales/ta/ghost.json b/ghost/i18n/locales/ta/ghost.json
index 5db858f34a3..aed73a8000d 100644
--- a/ghost/i18n/locales/ta/ghost.json
+++ b/ghost/i18n/locales/ta/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} க்கான பாதுகாப்பான உள்நுழைவு இணைப்பு",
"See you soon!": "உங்களை விரைவில் சந்திக்கிறோம்!",
"Sent to {email}": "{email} க்கு அனுப்பப்பட்டது",
+ "Share": "",
"Sign in": "உள்நுழை",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle} க்கு உள்நுழையவும்",
diff --git a/ghost/i18n/locales/th/ghost.json b/ghost/i18n/locales/th/ghost.json
index 713352833e0..71f35f6f283 100644
--- a/ghost/i18n/locales/th/ghost.json
+++ b/ghost/i18n/locales/th/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "ลิงก์ลงชื่อเข้าใช้อย่างปลอดภัยสำหรับ {siteTitle}",
"See you soon!": "แล้วพบกัน!",
"Sent to {email}": "ส่งไปที่ {email}",
+ "Share": "",
"Sign in": "ลงชื่อเข้าใช้",
"Sign in now": "",
"Sign in to {siteTitle}": "ลงชื่อเข้าใช้ไปยัง {siteTitle}",
diff --git a/ghost/i18n/locales/tr/ghost.json b/ghost/i18n/locales/tr/ghost.json
index f97a8430fd7..43ff2ee5207 100644
--- a/ghost/i18n/locales/tr/ghost.json
+++ b/ghost/i18n/locales/tr/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} için güvenli giriş bağlantısı",
"See you soon!": "Yakında görüşmek üzere!",
"Sent to {email}": "{email} adresine gönderildi",
+ "Share": "",
"Sign in": "Giriş Yap",
"Sign in now": "Şimdi giriş yap",
"Sign in to {siteTitle}": "{siteTitle} sitesine giriş yap",
diff --git a/ghost/i18n/locales/uk/ghost.json b/ghost/i18n/locales/uk/ghost.json
index 29b473b7545..34a41a271b4 100644
--- a/ghost/i18n/locales/uk/ghost.json
+++ b/ghost/i18n/locales/uk/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Безпечне посилання для входу до {siteTitle}",
"See you soon!": "До зустрічі!",
"Sent to {email}": "Відправлено на {email}",
+ "Share": "",
"Sign in": "Вхід",
"Sign in now": "",
"Sign in to {siteTitle}": "Увійти до {siteTitle}",
diff --git a/ghost/i18n/locales/ur/ghost.json b/ghost/i18n/locales/ur/ghost.json
index 5435ae08ad0..7e6d7b91e31 100644
--- a/ghost/i18n/locales/ur/ghost.json
+++ b/ghost/i18n/locales/ur/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} کے لئے محفوظ سائن ان لنک",
"See you soon!": "جلد ہی ملیں گے!",
"Sent to {email}": "{email} کو بھیجا گیا",
+ "Share": "",
"Sign in": "سائن ان",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle} میں سائن ان کریں",
diff --git a/ghost/i18n/locales/uz/ghost.json b/ghost/i18n/locales/uz/ghost.json
index 677ea8bd547..872c11ce49d 100644
--- a/ghost/i18n/locales/uz/ghost.json
+++ b/ghost/i18n/locales/uz/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "{siteTitle} uchun xavfsiz kirish havolasi",
"See you soon!": "Ko'rishguncha!",
"Sent to {email}": "{email}ga yuborildi",
+ "Share": "",
"Sign in": "",
"Sign in now": "",
"Sign in to {siteTitle}": "{siteTitle}ga kirish",
diff --git a/ghost/i18n/locales/vi/ghost.json b/ghost/i18n/locales/vi/ghost.json
index 096c8e566eb..a6f85dd92ca 100644
--- a/ghost/i18n/locales/vi/ghost.json
+++ b/ghost/i18n/locales/vi/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "Liên kết đăng nhập {siteTitle} an toàn",
"See you soon!": "Hẹn gặp lại bạn!",
"Sent to {email}": "Đã gửi đến {email}",
+ "Share": "",
"Sign in": "Đăng nhập",
"Sign in now": "Đăng nhập ngay",
"Sign in to {siteTitle}": "Đăng nhập {siteTitle}",
diff --git a/ghost/i18n/locales/zh-Hant/ghost.json b/ghost/i18n/locales/zh-Hant/ghost.json
index 201a407e7e3..7c48187cd86 100644
--- a/ghost/i18n/locales/zh-Hant/ghost.json
+++ b/ghost/i18n/locales/zh-Hant/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "為{siteTitle}準備的安全登入連結",
"See you soon!": "再見!",
"Sent to {email}": "已發送到 {email}",
+ "Share": "",
"Sign in": "登入",
"Sign in now": "立即登入",
"Sign in to {siteTitle}": "登入到 {siteTitle}",
diff --git a/ghost/i18n/locales/zh/ghost.json b/ghost/i18n/locales/zh/ghost.json
index 6689d5bdb22..aa8c07a119f 100644
--- a/ghost/i18n/locales/zh/ghost.json
+++ b/ghost/i18n/locales/zh/ghost.json
@@ -39,6 +39,7 @@
"Secure sign in link for {siteTitle}": "为 {siteTitle} 准备的安全登录链接",
"See you soon!": "回见!",
"Sent to {email}": "已发送至 {email}",
+ "Share": "",
"Sign in": "登录",
"Sign in now": "立即登录",
"Sign in to {siteTitle}": "登录到 {siteTitle}",
diff --git a/package.json b/package.json
index b137d2e6443..617c59241a9 100644
--- a/package.json
+++ b/package.json
@@ -67,7 +67,7 @@
"jackspeak": "2.3.6",
"moment": "2.24.0",
"moment-timezone": "0.5.45",
- "nwsapi": "2.2.12"
+ "nwsapi": "2.2.23"
},
"devDependencies": {
"@actions/core": "3.0.0",
@@ -80,7 +80,7 @@
"husky": "8.0.3",
"inquirer": "8.2.7",
"jsonc-parser": "3.3.1",
- "lint-staged": "15.5.2",
+ "lint-staged": "16.4.0",
"nx": "22.0.4",
"rimraf": "6.1.3",
"semver": "7.7.4",
diff --git a/yarn.lock b/yarn.lock
index 481adbe637d..462c1cff495 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3784,15 +3784,15 @@
resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-9.9.0.tgz#3ad015fbbaaae7af3149555e0f22b4b30134c69d"
integrity sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA==
-"@fastify/otel@0.16.0":
- version "0.16.0"
- resolved "https://registry.yarnpkg.com/@fastify/otel/-/otel-0.16.0.tgz#e003c9b81039490af9141a7f1397de6b05baa768"
- integrity sha512-2304BdM5Q/kUvQC9qJO1KZq3Zn1WWsw+WWkVmFEaj1UE2hEIiuFqrPeglQOwEtw/ftngisqfQ3v70TWMmwhhHA==
+"@fastify/otel@0.17.1":
+ version "0.17.1"
+ resolved "https://registry.yarnpkg.com/@fastify/otel/-/otel-0.17.1.tgz#a7f13edc40dbc2e0c2a59d54e388f11e4d2235ce"
+ integrity sha512-K4wyxfUZx2ux5o+b6BtTqouYFVILohLZmSbA2tKUueJstNcBnoGPVhllCaOvbQ3ZrXdUxUC/fyrSWSCqHhdOPg==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.208.0"
+ "@opentelemetry/instrumentation" "^0.212.0"
"@opentelemetry/semantic-conventions" "^1.28.0"
- minimatch "^10.0.3"
+ minimatch "^10.2.4"
"@floating-ui/core@^1.4.1":
version "1.4.1"
@@ -5074,17 +5074,17 @@
dependencies:
"@opentelemetry/api" "^1.3.0"
-"@opentelemetry/api-logs@0.208.0":
- version "0.208.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.208.0.tgz#56d3891010a1fa1cf600ba8899ed61b43ace511c"
- integrity sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==
+"@opentelemetry/api-logs@0.212.0":
+ version "0.212.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.212.0.tgz#ec66a0951b84b1f082e13fd8a027b9f9d65a3f7a"
+ integrity sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg==
dependencies:
"@opentelemetry/api" "^1.3.0"
-"@opentelemetry/api-logs@0.211.0":
- version "0.211.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.211.0.tgz#32d9ed98939956a84d4e2ff5e01598cb9d28d744"
- integrity sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg==
+"@opentelemetry/api-logs@0.213.0":
+ version "0.213.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.213.0.tgz#c7abc7d3c4586cfbfd737c0a2fcfb2323a9def75"
+ integrity sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw==
dependencies:
"@opentelemetry/api" "^1.3.0"
@@ -5093,223 +5093,223 @@
resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe"
integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==
-"@opentelemetry/context-async-hooks@^2.5.1":
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.6.0.tgz#6c824e900630b378233c1a78ca7f0dc5a3b460b2"
- integrity sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q==
-
-"@opentelemetry/core@2.5.0":
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.5.0.tgz#3b2ac6cf471ed9a85eea836048a4de77a2e549d3"
- integrity sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==
- dependencies:
- "@opentelemetry/semantic-conventions" "^1.29.0"
+"@opentelemetry/context-async-hooks@^2.6.0":
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.6.1.tgz#06e60d5b3fba992a832af7f034758574e951bba3"
+ integrity sha512-XHzhwRNkBpeP8Fs/qjGrAf9r9PRv67wkJQ/7ZPaBQQ68DYlTBBx5MF9LvPx7mhuXcDessKK2b+DcxqwpgkcivQ==
-"@opentelemetry/core@2.6.0", "@opentelemetry/core@^2.0.0", "@opentelemetry/core@^2.5.1":
+"@opentelemetry/core@2.6.0":
version "2.6.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.6.0.tgz#719c829ed98bd7af808a2d2c83374df1fd1f3c66"
integrity sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg==
dependencies:
"@opentelemetry/semantic-conventions" "^1.29.0"
-"@opentelemetry/instrumentation-amqplib@0.58.0":
- version "0.58.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.58.0.tgz#e3dc86ebfa7d72fe861a63b1c24a062faeb64a8c"
- integrity sha512-fjpQtH18J6GxzUZ+cwNhWUpb71u+DzT7rFkg5pLssDGaEber91Y2WNGdpVpwGivfEluMlNMZumzjEqfg8DeKXQ==
+"@opentelemetry/core@2.6.1", "@opentelemetry/core@^2.0.0", "@opentelemetry/core@^2.6.0":
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.6.1.tgz#a59d22a9ae3be80bb41b280bbbe1fe9fbdb6c2a5"
+ integrity sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g==
+ dependencies:
+ "@opentelemetry/semantic-conventions" "^1.29.0"
+
+"@opentelemetry/instrumentation-amqplib@0.60.0":
+ version "0.60.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.60.0.tgz#a2b2abe3cf433bea166c18a703c8ddf6accf83da"
+ integrity sha512-q/B2IvoVXRm1M00MvhnzpMN6rKYOszPXVsALi6u0ss4AYHe+TidZEtLW9N1ZhrobI1dSriHnBqqtAOZVAv07sg==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.33.0"
-"@opentelemetry/instrumentation-connect@0.54.0":
- version "0.54.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.54.0.tgz#87312850844b6c57976d00bd3256d55650543772"
- integrity sha512-43RmbhUhqt3uuPnc16cX6NsxEASEtn8z/cYV8Zpt6EP4p2h9s4FNuJ4Q9BbEQ2C0YlCCB/2crO1ruVz/hWt8fA==
+"@opentelemetry/instrumentation-connect@0.56.0":
+ version "0.56.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.56.0.tgz#8d846d2f7cf1f6b2723e5b0ff5595e8d31cb7446"
+ integrity sha512-PKp+sSZ7AfzMvGgO3VCyo1inwNu+q7A1k9X88WK4PQ+S6Hp7eFk8pie+sWHDTaARovmqq5V2osav3lQej2B0nw==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.27.0"
"@types/connect" "3.4.38"
-"@opentelemetry/instrumentation-dataloader@0.28.0":
- version "0.28.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.28.0.tgz#b857bb038e4a2a3b7278f3da89a1e210bb15339e"
- integrity sha512-ExXGBp0sUj8yhm6Znhf9jmuOaGDsYfDES3gswZnKr4MCqoBWQdEFn6EoDdt5u+RdbxQER+t43FoUihEfTSqsjA==
+"@opentelemetry/instrumentation-dataloader@0.30.0":
+ version "0.30.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.30.0.tgz#7fbea57b27165324092639abf090ca3697eb7a80"
+ integrity sha512-MXHP2Q38cd2OhzEBKAIXUi9uBlPEYzF6BNJbyjUXBQ6kLaf93kRC41vNMIz0Nl5mnuwK7fDvKT+/lpx7BXRwdg==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
-"@opentelemetry/instrumentation-express@0.59.0":
- version "0.59.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.59.0.tgz#c2ac7dcb4f9904926518408cdf4efb046e724382"
- integrity sha512-pMKV/qnHiW/Q6pmbKkxt0eIhuNEtvJ7sUAyee192HErlr+a1Jx+FZ3WjfmzhQL1geewyGEiPGkmjjAgNY8TgDA==
+"@opentelemetry/instrumentation-express@0.61.0":
+ version "0.61.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.61.0.tgz#49b4d144ab6e9d6e035941a51f5e573e84e3647f"
+ integrity sha512-Xdmqo9RZuZlL29Flg8QdwrrX7eW1CZ7wFQPKHyXljNymgKhN1MCsYuqQ/7uxavhSKwAl7WxkTzKhnqpUApLMvQ==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.27.0"
-"@opentelemetry/instrumentation-fs@0.30.0":
- version "0.30.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.30.0.tgz#5e28edde0591dc4ffa471a86a68f91e737fe31fb"
- integrity sha512-n3Cf8YhG7reaj5dncGlRIU7iT40bxPOjsBEA5Bc1a1g6e9Qvb+JFJ7SEiMlPbUw4PBmxE3h40ltE8LZ3zVt6OA==
+"@opentelemetry/instrumentation-fs@0.32.0":
+ version "0.32.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.32.0.tgz#2010d86da8ab3d543f8e44c8fff81b94f904d91d"
+ integrity sha512-koR6apx0g0wX6RRiPpjA4AFQUQUbXrK16kq4/SZjVp7u5cffJhNkY4TnITxcGA4acGSPYAfx3NHRIv4Khn1axQ==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
-"@opentelemetry/instrumentation-generic-pool@0.54.0":
- version "0.54.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.54.0.tgz#9f3ad0cedbfe5011efe4ebdc76c85a73a0b967a6"
- integrity sha512-8dXMBzzmEdXfH/wjuRvcJnUFeWzZHUnExkmFJ2uPfa31wmpyBCMxO59yr8f/OXXgSogNgi/uPo9KW9H7LMIZ+g==
+"@opentelemetry/instrumentation-generic-pool@0.56.0":
+ version "0.56.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.56.0.tgz#01560f52d5bac6fb6312a1f0bc74bf0939119894"
+ integrity sha512-fg+Jffs6fqrf0uQS0hom7qBFKsbtpBiBl8+Vkc63Gx8xh6pVh+FhagmiO6oM0m3vyb683t1lP7yGYq22SiDnqg==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
-"@opentelemetry/instrumentation-graphql@0.58.0":
- version "0.58.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.58.0.tgz#3ca294ba410e04c920dc82ab4caa23ec1c2e1a2e"
- integrity sha512-+yWVVY7fxOs3j2RixCbvue8vUuJ1inHxN2q1sduqDB0Wnkr4vOzVKRYl/Zy7B31/dcPS72D9lo/kltdOTBM3bQ==
+"@opentelemetry/instrumentation-graphql@0.61.0":
+ version "0.61.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.61.0.tgz#d1f896095a891c9576967645e7fcba935da82a94"
+ integrity sha512-pUiVASv6nh2XrerTvlbVHh7vKFzscpgwiQ/xvnZuAIzQ5lRjWVdRPUuXbvZJ/Yq79QsE81TZdJ7z9YsXiss1ew==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
-"@opentelemetry/instrumentation-hapi@0.57.0":
- version "0.57.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.57.0.tgz#27b3a44a51444af3100a321f2e40623e89e5bb75"
- integrity sha512-Os4THbvls8cTQTVA8ApLfZZztuuqGEeqog0XUnyRW7QVF0d/vOVBEcBCk1pazPFmllXGEdNbbat8e2fYIWdFbw==
+"@opentelemetry/instrumentation-hapi@0.59.0":
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.59.0.tgz#412ea19e97ead684c5737e1f1aaa19ff940512d3"
+ integrity sha512-33wa4mEr+9+ztwdgLor1SeBu4Opz4IsmpcLETXAd3VmBrOjez8uQtrsOhPCa5Vhbm5gzDlMYTgFRLQzf8/YHFA==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.27.0"
-"@opentelemetry/instrumentation-http@0.211.0":
- version "0.211.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.211.0.tgz#2f12f83f0c21d37917fd9710fb5b755f28858cf6"
- integrity sha512-n0IaQ6oVll9PP84SjbOCwDjaJasWRHi6BLsbMLiT6tNj7QbVOkuA5sk/EfZczwI0j5uTKl1awQPivO/ldVtsqA==
+"@opentelemetry/instrumentation-http@0.213.0":
+ version "0.213.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.213.0.tgz#b379d6bcbae43a7d6d54070f3794527021f176c9"
+ integrity sha512-B978Xsm5XEPGhm1P07grDoaOFLHapJPkOG9h016cJsyWWxmiLnPu2M/4Nrm7UCkHSiLnkXgC+zVGUAIahy8EEA==
dependencies:
- "@opentelemetry/core" "2.5.0"
- "@opentelemetry/instrumentation" "0.211.0"
+ "@opentelemetry/core" "2.6.0"
+ "@opentelemetry/instrumentation" "0.213.0"
"@opentelemetry/semantic-conventions" "^1.29.0"
forwarded-parse "2.1.2"
-"@opentelemetry/instrumentation-ioredis@0.59.0":
- version "0.59.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.59.0.tgz#530d06aa67b73ea732414557adebe1dde7de430f"
- integrity sha512-875UxzBHWkW+P4Y45SoFM2AR8f8TzBMD8eO7QXGCyFSCUMP5s9vtt/BS8b/r2kqLyaRPK6mLbdnZznK3XzQWvw==
+"@opentelemetry/instrumentation-ioredis@0.61.0":
+ version "0.61.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.61.0.tgz#e862540cbf188d0ca368d3a75020d165cb8beefb"
+ integrity sha512-hsHDadUtAFbws1YSDc1XW0svGFKiUbqv2td1Cby+UAiwvojm1NyBo/taifH0t8CuFZ0x/2SDm0iuTwrM5pnVOg==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/redis-common" "^0.38.2"
"@opentelemetry/semantic-conventions" "^1.33.0"
-"@opentelemetry/instrumentation-kafkajs@0.20.0":
- version "0.20.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.20.0.tgz#521db06d10d39f42e842ce336e5c1e48b3da2956"
- integrity sha512-yJXOuWZROzj7WmYCUiyT27tIfqBrVtl1/TwVbQyWPz7rL0r1Lu7kWjD0PiVeTCIL6CrIZ7M2s8eBxsTAOxbNvw==
+"@opentelemetry/instrumentation-kafkajs@0.22.0":
+ version "0.22.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.22.0.tgz#a3cf7aca003f96211e514a348b7568799efdfba1"
+ integrity sha512-wJU4IBQMUikdJAcTChLFqK5lo+flo7pahqd8DSLv7uMxsdOdAHj6RzKYAm8pPfUS6ItKYutYyuicwKaFwQKsoA==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.30.0"
-"@opentelemetry/instrumentation-knex@0.55.0":
- version "0.55.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.55.0.tgz#fefc17d854a107d99ab0dbc8933d5897efce1abd"
- integrity sha512-FtTL5DUx5Ka/8VK6P1VwnlUXPa3nrb7REvm5ddLUIeXXq4tb9pKd+/ThB1xM/IjefkRSN3z8a5t7epYw1JLBJQ==
+"@opentelemetry/instrumentation-knex@0.57.0":
+ version "0.57.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.57.0.tgz#d46622a3f82f3df2ba29c64498d6ef828a40457e"
+ integrity sha512-vMCSh8kolEm5rRsc+FZeTZymWmIJwc40hjIKnXH4O0Dv/gAkJJIRXCsPX5cPbe0c0j/34+PsENd0HqKruwhVYw==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.33.1"
-"@opentelemetry/instrumentation-koa@0.59.0":
- version "0.59.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.59.0.tgz#7df8850fa193a8f590e3fbcab00016e25db27041"
- integrity sha512-K9o2skADV20Skdu5tG2bogPKiSpXh4KxfLjz6FuqIVvDJNibwSdu5UvyyBzRVp1rQMV6UmoIk6d3PyPtJbaGSg==
+"@opentelemetry/instrumentation-koa@0.61.0":
+ version "0.61.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.61.0.tgz#c12f57b023834afb1c142c11746d560bcc288b5b"
+ integrity sha512-lvrfWe9ShK/D2X4brmx8ZqqeWPfRl8xekU0FCn7C1dHm5k6+rTOOi36+4fnaHAP8lig9Ux6XQ1D4RNIpPCt1WQ==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.36.0"
-"@opentelemetry/instrumentation-lru-memoizer@0.55.0":
- version "0.55.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.55.0.tgz#776d5f10178adfbda7286b4f31adde8bb518d55a"
- integrity sha512-FDBfT7yDGcspN0Cxbu/k8A0Pp1Jhv/m7BMTzXGpcb8ENl3tDj/51U65R5lWzUH15GaZA15HQ5A5wtafklxYj7g==
+"@opentelemetry/instrumentation-lru-memoizer@0.57.0":
+ version "0.57.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.57.0.tgz#4da92ecd1bc5d5e9c7de28ea14ed57c9f29cfefd"
+ integrity sha512-cEqpUocSKJfwDtLYTTJehRLWzkZ2eoePCxfVIgGkGkb83fMB71O+y4MvRHJPbeV2bdoWdOVrl8uO0+EynWhTEA==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
-"@opentelemetry/instrumentation-mongodb@0.64.0":
- version "0.64.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.64.0.tgz#0027c13fdd7506eb1f618998245edd244cc23cc7"
- integrity sha512-pFlCJjweTqVp7B220mCvCld1c1eYKZfQt1p3bxSbcReypKLJTwat+wbL2YZoX9jPi5X2O8tTKFEOahO5ehQGsA==
+"@opentelemetry/instrumentation-mongodb@0.66.0":
+ version "0.66.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.66.0.tgz#990bf4571382d3b02a9584927411c92c375d2fd4"
+ integrity sha512-d7m9QnAY+4TCWI4q1QRkfrc6fo/92VwssaB1DzQfXNRvu51b78P+HJlWP7Qg6N6nkwdb9faMZNBCZJfftmszkw==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.33.0"
-"@opentelemetry/instrumentation-mongoose@0.57.0":
- version "0.57.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.57.0.tgz#2ce3f3bbf66a255958c3a112a92079898d69f624"
- integrity sha512-MthiekrU/BAJc5JZoZeJmo0OTX6ycJMiP6sMOSRTkvz5BrPMYDqaJos0OgsLPL/HpcgHP7eo5pduETuLguOqcg==
+"@opentelemetry/instrumentation-mongoose@0.59.0":
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.59.0.tgz#8446ece86df59f09c630e7df6d794c8cd08f58d8"
+ integrity sha512-6/jWU+c1NgznkVLDU/2y0bXV2nJo3o9FWZ9mZ9nN6T/JBNRoMnVXZl2FdBmgH+a5MwaWLs5kmRJTP5oUVGIkPw==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.33.0"
-"@opentelemetry/instrumentation-mysql2@0.57.0":
- version "0.57.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.57.0.tgz#928eda47c6f4ab193d3363fcab01d81a70adc46b"
- integrity sha512-nHSrYAwF7+aV1E1V9yOOP9TchOodb6fjn4gFvdrdQXiRE7cMuffyLLbCZlZd4wsspBzVwOXX8mpURdRserAhNA==
+"@opentelemetry/instrumentation-mysql2@0.59.0":
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.59.0.tgz#938cd4a294b7e4a6e8c3855b8cfe267c8d2e5493"
+ integrity sha512-n9/xrVCRBfG9egVbffnlU1uhr+HX0vF4GgtAB/Bvm48wpFgRidqD8msBMiym1kRYzmpWvJqTxNT47u1MkgBEdw==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.33.0"
"@opentelemetry/sql-common" "^0.41.2"
-"@opentelemetry/instrumentation-mysql@0.57.0":
- version "0.57.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.57.0.tgz#74d42a1c6d20aee93996f8b6f6b7b69469748754"
- integrity sha512-HFS/+FcZ6Q7piM7Il7CzQ4VHhJvGMJWjx7EgCkP5AnTntSN5rb5Xi3TkYJHBKeR27A0QqPlGaCITi93fUDs++Q==
+"@opentelemetry/instrumentation-mysql@0.59.0":
+ version "0.59.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.59.0.tgz#bf43cafbac5928236ea53704a52c718349c22e38"
+ integrity sha512-r+V/Fh0sm7Ga8/zk/TI5H5FQRAjwr0RrpfPf8kNIehlsKf12XnvIaZi8ViZkpX0gyPEpLXqzqWD6QHlgObgzZw==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.33.0"
"@types/mysql" "2.15.27"
-"@opentelemetry/instrumentation-pg@0.63.0":
- version "0.63.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.63.0.tgz#852ca5519d756c613bb9f3153a5e70c2b805e5cf"
- integrity sha512-dKm/ODNN3GgIQVlbD6ZPxwRc3kleLf95hrRWXM+l8wYo+vSeXtEpQPT53afEf6VFWDVzJK55VGn8KMLtSve/cg==
+"@opentelemetry/instrumentation-pg@0.65.0":
+ version "0.65.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.65.0.tgz#f1f76f8c57c5c6fec68c77ce6ee104fee5de13e1"
+ integrity sha512-W0zpHEIEuyZ8zvb3njaX9AAbHgPYOsSWVOoWmv1sjVRSF6ZpBqtlxBWbU+6hhq1TFWBeWJOXZ8nZS/PUFpLJYQ==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.34.0"
"@opentelemetry/sql-common" "^0.41.2"
"@types/pg" "8.15.6"
"@types/pg-pool" "2.0.7"
-"@opentelemetry/instrumentation-redis@0.59.0":
- version "0.59.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.59.0.tgz#44c1bd7852cdadbe77c1bdfa94185528012558cf"
- integrity sha512-JKv1KDDYA2chJ1PC3pLP+Q9ISMQk6h5ey+99mB57/ARk0vQPGZTTEb4h4/JlcEpy7AYT8HIGv7X6l+br03Neeg==
+"@opentelemetry/instrumentation-redis@0.61.0":
+ version "0.61.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.61.0.tgz#b43b9c3b5d0b124f2e60b055e4529a3a4b55dbc4"
+ integrity sha512-JnPexA034/0UJRsvH96B0erQoNOqKJZjE2ZRSw9hiTSC23LzE0nJE/u6D+xqOhgUhRnhhcPHq4MdYtmUdYTF+Q==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/redis-common" "^0.38.2"
"@opentelemetry/semantic-conventions" "^1.27.0"
-"@opentelemetry/instrumentation-tedious@0.30.0":
- version "0.30.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.30.0.tgz#4a8906b5322c4add4132e6e086c23e17bc23626b"
- integrity sha512-bZy9Q8jFdycKQ2pAsyuHYUHNmCxCOGdG6eg1Mn75RvQDccq832sU5OWOBnc12EFUELI6icJkhR7+EQKMBam2GA==
+"@opentelemetry/instrumentation-tedious@0.32.0":
+ version "0.32.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.32.0.tgz#8204a14adb71adcbf7d72705244d606bb69e428a"
+ integrity sha512-BQS6gG8RJ1foEqfEZ+wxoqlwfCAzb1ZVG0ad8Gfe4x8T658HJCLGLd4E4NaoQd8EvPfLqOXgzGaE/2U4ytDSWA==
dependencies:
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.33.0"
"@types/tedious" "^4.0.14"
-"@opentelemetry/instrumentation-undici@0.21.0":
- version "0.21.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.21.0.tgz#dcb43a364c39e78217946aeb7aa09156e55f4c6c"
- integrity sha512-gok0LPUOTz2FQ1YJMZzaHcOzDFyT64XJ8M9rNkugk923/p6lDGms/cRW1cqgqp6N6qcd6K6YdVHwPEhnx9BWbw==
+"@opentelemetry/instrumentation-undici@0.23.0":
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.23.0.tgz#e328bf6e53847ba7baa2a345d02221cc62917cec"
+ integrity sha512-LL0VySzKVR2cJSFVZaTYpZl1XTpBGnfzoQPe2W7McS2267ldsaEIqtQY6VXs2KCXN0poFjze5110PIpxHDaDGg==
dependencies:
"@opentelemetry/core" "^2.0.0"
- "@opentelemetry/instrumentation" "^0.211.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
"@opentelemetry/semantic-conventions" "^1.24.0"
-"@opentelemetry/instrumentation@0.211.0", "@opentelemetry/instrumentation@^0.211.0":
- version "0.211.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.211.0.tgz#d45e20eafa75b5d3e8a9745a6205332893c55f37"
- integrity sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q==
+"@opentelemetry/instrumentation@0.213.0", "@opentelemetry/instrumentation@^0.213.0":
+ version "0.213.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.213.0.tgz#55362569efd0cba00aab9921a78dd20dfddf70b6"
+ integrity sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w==
dependencies:
- "@opentelemetry/api-logs" "0.211.0"
- import-in-the-middle "^2.0.0"
+ "@opentelemetry/api-logs" "0.213.0"
+ import-in-the-middle "^3.0.0"
require-in-the-middle "^8.0.0"
"@opentelemetry/instrumentation@^0.207.0":
@@ -5321,13 +5321,13 @@
import-in-the-middle "^2.0.0"
require-in-the-middle "^8.0.0"
-"@opentelemetry/instrumentation@^0.208.0":
- version "0.208.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.208.0.tgz#d764f8e4329dad50804e2e98f010170c14c4ce8f"
- integrity sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==
+"@opentelemetry/instrumentation@^0.212.0":
+ version "0.212.0"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.212.0.tgz#238b6e3e2131217ff4acfe7e8e7b6ce1f0ac0ba0"
+ integrity sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg==
dependencies:
- "@opentelemetry/api-logs" "0.208.0"
- import-in-the-middle "^2.0.0"
+ "@opentelemetry/api-logs" "0.212.0"
+ import-in-the-middle "^2.0.6"
require-in-the-middle "^8.0.0"
"@opentelemetry/redis-common@^0.38.2":
@@ -5335,24 +5335,24 @@
resolved "https://registry.yarnpkg.com/@opentelemetry/redis-common/-/redis-common-0.38.2.tgz#cefa4f3e79db1cd54f19e233b7dfb56621143955"
integrity sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==
-"@opentelemetry/resources@2.6.0", "@opentelemetry/resources@^2.5.1":
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.6.0.tgz#1a945dbb8986043d8b593c358d5d8e3de6becf5a"
- integrity sha512-D4y/+OGe3JSuYUCBxtH5T9DSAWNcvCb/nQWIga8HNtXTVPQn59j0nTBAgaAXxUVBDl40mG3Tc76b46wPlZaiJQ==
+"@opentelemetry/resources@2.6.1", "@opentelemetry/resources@^2.6.0":
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.6.1.tgz#e1b02772c5f65c0e074d59e4743188f7575e97c7"
+ integrity sha512-lID/vxSuKWXM55XhAKNoYXu9Cutoq5hFdkbTdI/zDKQktXzcWBVhNsOkiZFTMU9UtEWuGRNe0HUgmsFldIdxVA==
dependencies:
- "@opentelemetry/core" "2.6.0"
+ "@opentelemetry/core" "2.6.1"
"@opentelemetry/semantic-conventions" "^1.29.0"
-"@opentelemetry/sdk-trace-base@^2.5.1":
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.6.0.tgz#d7e752a0906f2bcae3c1261e224aef3e3b3746f9"
- integrity sha512-g/OZVkqlxllgFM7qMKqbPV9c1DUPhQ7d4n3pgZFcrnrNft9eJXZM2TNHTPYREJBrtNdRytYyvwjgL5geDKl3EQ==
+"@opentelemetry/sdk-trace-base@^2.6.0":
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.6.1.tgz#ed353062be4c28a0649247ad369654020c29bfce"
+ integrity sha512-r86ut4T1e8vNwB35CqCcKd45yzqH6/6Wzvpk2/cZB8PsPLlZFTvrh8yfOS3CYZYcUmAx4hHTZJ8AO8Dj8nrdhw==
dependencies:
- "@opentelemetry/core" "2.6.0"
- "@opentelemetry/resources" "2.6.0"
+ "@opentelemetry/core" "2.6.1"
+ "@opentelemetry/resources" "2.6.1"
"@opentelemetry/semantic-conventions" "^1.29.0"
-"@opentelemetry/semantic-conventions@^1.24.0", "@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.28.0", "@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.30.0", "@opentelemetry/semantic-conventions@^1.33.0", "@opentelemetry/semantic-conventions@^1.33.1", "@opentelemetry/semantic-conventions@^1.34.0", "@opentelemetry/semantic-conventions@^1.36.0", "@opentelemetry/semantic-conventions@^1.39.0":
+"@opentelemetry/semantic-conventions@^1.24.0", "@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.28.0", "@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.30.0", "@opentelemetry/semantic-conventions@^1.33.0", "@opentelemetry/semantic-conventions@^1.33.1", "@opentelemetry/semantic-conventions@^1.34.0", "@opentelemetry/semantic-conventions@^1.36.0", "@opentelemetry/semantic-conventions@^1.40.0":
version "1.40.0"
resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz#10b2944ca559386590683392022a897eefd011d3"
integrity sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==
@@ -5417,12 +5417,12 @@
resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.9.tgz#d229a7b7f9dac167a156992ef23c7f023653f53b"
integrity sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==
-"@playwright/test@1.58.2":
- version "1.58.2"
- resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.58.2.tgz#b0ad585d2e950d690ef52424967a42f40c6d2cbd"
- integrity sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==
+"@playwright/test@1.59.1":
+ version "1.59.1"
+ resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.59.1.tgz#5c4d38eac84a61527af466602ae20277685a02d6"
+ integrity sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==
dependencies:
- playwright "1.58.2"
+ playwright "1.59.1"
"@polka/url@^1.0.0-next.24":
version "1.0.0-next.29"
@@ -5441,10 +5441,10 @@
dependencies:
make-synchronized "^0.8.0"
-"@prisma/instrumentation@7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-7.2.0.tgz#9409a436d8f98e8950c8659aeeba045c4a07e891"
- integrity sha512-Rh9Z4x5kEj1OdARd7U18AtVrnL6rmLSI0qYShaB4W7Wx5BKbgzndWF+QnuzMb7GLfVdlT5aYCXoPQVYuYtVu0g==
+"@prisma/instrumentation@7.4.2":
+ version "7.4.2"
+ resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-7.4.2.tgz#b05e814d0647343febd26a8ccb039d27ccc69eca"
+ integrity sha512-r9JfchJF1Ae6yAxcaLu/V1TGqBhAuSDe3mRNOssBfx1rMzfZ4fdNvrgUBwyb/TNTGXFxlH9AZix5P257x07nrg==
dependencies:
"@opentelemetry/instrumentation" "^0.207.0"
@@ -6658,10 +6658,10 @@
"@sentry/types" "7.120.4"
"@sentry/utils" "7.120.4"
-"@sentry/core@10.43.0":
- version "10.43.0"
- resolved "https://registry.yarnpkg.com/@sentry/core/-/core-10.43.0.tgz#48b7b2295f36097775b529c59712688c9087c7bc"
- integrity sha512-l0SszQAPiQGWl/ferw8GP3ALyHXiGiRKJaOvNmhGO+PrTQyZTZ6OYyPnGijAFRg58dE1V3RCH/zw5d2xSUIiNg==
+"@sentry/core@10.46.0":
+ version "10.46.0"
+ resolved "https://registry.yarnpkg.com/@sentry/core/-/core-10.46.0.tgz#f3d6398acccddfea27dda656e639494f83d0bb09"
+ integrity sha512-N3fj4zqBQOhXliS1Ne9euqIKuciHCGOJfPGQLwBoW9DNz03jF+NB8+dUKtrJ79YLoftjVgf8nbgwtADK7NR+2Q==
"@sentry/core@7.114.0":
version "7.114.0"
@@ -6740,55 +6740,55 @@
"@sentry/utils" "7.120.4"
localforage "^1.8.1"
-"@sentry/node-core@10.43.0":
- version "10.43.0"
- resolved "https://registry.yarnpkg.com/@sentry/node-core/-/node-core-10.43.0.tgz#f8575be3ad09e86e8e18e54074f3bcafea344234"
- integrity sha512-w2H3NSkNMoYOS7o7mR55BM7+xL++dPxMSv1/XDfsra9FYHGppO+Mxk667Ee5k+uDi+wNIioICIh+5XOvZh4+HQ==
+"@sentry/node-core@10.46.0":
+ version "10.46.0"
+ resolved "https://registry.yarnpkg.com/@sentry/node-core/-/node-core-10.46.0.tgz#15c7a2f8c71089049c8e66206915f2547cae52e2"
+ integrity sha512-gwLGXfkzmiCmUI1VWttyoZBaVp1ItpDKc8AV2mQblWPQGdLSD0c6uKV/FkU291yZA3rXsrLXVwcWoibwnjE2vw==
dependencies:
- "@sentry/core" "10.43.0"
- "@sentry/opentelemetry" "10.43.0"
- import-in-the-middle "^2.0.6"
+ "@sentry/core" "10.46.0"
+ "@sentry/opentelemetry" "10.46.0"
+ import-in-the-middle "^3.0.0"
-"@sentry/node@10.43.0":
- version "10.43.0"
- resolved "https://registry.yarnpkg.com/@sentry/node/-/node-10.43.0.tgz#466acf853565d92d972b7e012fab6558a32a739e"
- integrity sha512-oNwXcuZUc4uTTr0WbHZBBIKsKwAKvNMTgbXwxfB37CfzV18wbTirbQABZ/Ir3WNxSgi6ZcnC6UE013jF5XWPqw==
+"@sentry/node@10.46.0":
+ version "10.46.0"
+ resolved "https://registry.yarnpkg.com/@sentry/node/-/node-10.46.0.tgz#89977f24e8bbd304ad6a1460f6efb5dd6d72ec56"
+ integrity sha512-vF+7FrUXEtmYWuVcnvBjlWKeyLw/kwHpwnGj9oUmO/a2uKjDmUr53ZVcapggNxCjivavGYr9uHOY64AGdeUyzA==
dependencies:
- "@fastify/otel" "0.16.0"
+ "@fastify/otel" "0.17.1"
"@opentelemetry/api" "^1.9.0"
- "@opentelemetry/context-async-hooks" "^2.5.1"
- "@opentelemetry/core" "^2.5.1"
- "@opentelemetry/instrumentation" "^0.211.0"
- "@opentelemetry/instrumentation-amqplib" "0.58.0"
- "@opentelemetry/instrumentation-connect" "0.54.0"
- "@opentelemetry/instrumentation-dataloader" "0.28.0"
- "@opentelemetry/instrumentation-express" "0.59.0"
- "@opentelemetry/instrumentation-fs" "0.30.0"
- "@opentelemetry/instrumentation-generic-pool" "0.54.0"
- "@opentelemetry/instrumentation-graphql" "0.58.0"
- "@opentelemetry/instrumentation-hapi" "0.57.0"
- "@opentelemetry/instrumentation-http" "0.211.0"
- "@opentelemetry/instrumentation-ioredis" "0.59.0"
- "@opentelemetry/instrumentation-kafkajs" "0.20.0"
- "@opentelemetry/instrumentation-knex" "0.55.0"
- "@opentelemetry/instrumentation-koa" "0.59.0"
- "@opentelemetry/instrumentation-lru-memoizer" "0.55.0"
- "@opentelemetry/instrumentation-mongodb" "0.64.0"
- "@opentelemetry/instrumentation-mongoose" "0.57.0"
- "@opentelemetry/instrumentation-mysql" "0.57.0"
- "@opentelemetry/instrumentation-mysql2" "0.57.0"
- "@opentelemetry/instrumentation-pg" "0.63.0"
- "@opentelemetry/instrumentation-redis" "0.59.0"
- "@opentelemetry/instrumentation-tedious" "0.30.0"
- "@opentelemetry/instrumentation-undici" "0.21.0"
- "@opentelemetry/resources" "^2.5.1"
- "@opentelemetry/sdk-trace-base" "^2.5.1"
- "@opentelemetry/semantic-conventions" "^1.39.0"
- "@prisma/instrumentation" "7.2.0"
- "@sentry/core" "10.43.0"
- "@sentry/node-core" "10.43.0"
- "@sentry/opentelemetry" "10.43.0"
- import-in-the-middle "^2.0.6"
+ "@opentelemetry/context-async-hooks" "^2.6.0"
+ "@opentelemetry/core" "^2.6.0"
+ "@opentelemetry/instrumentation" "^0.213.0"
+ "@opentelemetry/instrumentation-amqplib" "0.60.0"
+ "@opentelemetry/instrumentation-connect" "0.56.0"
+ "@opentelemetry/instrumentation-dataloader" "0.30.0"
+ "@opentelemetry/instrumentation-express" "0.61.0"
+ "@opentelemetry/instrumentation-fs" "0.32.0"
+ "@opentelemetry/instrumentation-generic-pool" "0.56.0"
+ "@opentelemetry/instrumentation-graphql" "0.61.0"
+ "@opentelemetry/instrumentation-hapi" "0.59.0"
+ "@opentelemetry/instrumentation-http" "0.213.0"
+ "@opentelemetry/instrumentation-ioredis" "0.61.0"
+ "@opentelemetry/instrumentation-kafkajs" "0.22.0"
+ "@opentelemetry/instrumentation-knex" "0.57.0"
+ "@opentelemetry/instrumentation-koa" "0.61.0"
+ "@opentelemetry/instrumentation-lru-memoizer" "0.57.0"
+ "@opentelemetry/instrumentation-mongodb" "0.66.0"
+ "@opentelemetry/instrumentation-mongoose" "0.59.0"
+ "@opentelemetry/instrumentation-mysql" "0.59.0"
+ "@opentelemetry/instrumentation-mysql2" "0.59.0"
+ "@opentelemetry/instrumentation-pg" "0.65.0"
+ "@opentelemetry/instrumentation-redis" "0.61.0"
+ "@opentelemetry/instrumentation-tedious" "0.32.0"
+ "@opentelemetry/instrumentation-undici" "0.23.0"
+ "@opentelemetry/resources" "^2.6.0"
+ "@opentelemetry/sdk-trace-base" "^2.6.0"
+ "@opentelemetry/semantic-conventions" "^1.40.0"
+ "@prisma/instrumentation" "7.4.2"
+ "@sentry/core" "10.46.0"
+ "@sentry/node-core" "10.46.0"
+ "@sentry/opentelemetry" "10.46.0"
+ import-in-the-middle "^3.0.0"
"@sentry/node@7.120.4":
version "7.120.4"
@@ -6801,12 +6801,12 @@
"@sentry/types" "7.120.4"
"@sentry/utils" "7.120.4"
-"@sentry/opentelemetry@10.43.0":
- version "10.43.0"
- resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-10.43.0.tgz#c2d3d58e943541a7ae81e79cf264b61c7fa20f1b"
- integrity sha512-+fIcnnLdvBHdq4nKq23t9v/B9D4L97fPWEDksXbpGs11o6BsqY4Tlzmce6cP95iiQhPckCEag3FthSND+BYtYQ==
+"@sentry/opentelemetry@10.46.0":
+ version "10.46.0"
+ resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-10.46.0.tgz#4d60c6ff437169f2402b8ed75a858ae22b074bd9"
+ integrity sha512-dzzV2ovruGsx9jzusGGr6cNPvMgYRu2BIrF8aMZ3rkQ1OpPJjPStqtA1l1fw0aoxHOxIjFU7ml4emF+xdmMl3g==
dependencies:
- "@sentry/core" "10.43.0"
+ "@sentry/core" "10.46.0"
"@sentry/react@7.120.4":
version "7.120.4"
@@ -8676,12 +8676,12 @@
dependencies:
ts-dedent "^2.0.0"
-"@storybook/core@8.6.14":
- version "8.6.14"
- resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.6.14.tgz#335b067709fd649512b6553b31ad48c8c56f7ed9"
- integrity sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==
+"@storybook/core@8.6.15":
+ version "8.6.15"
+ resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.6.15.tgz#ba3aa59b02981136fa671d545b64d380c1188c8b"
+ integrity sha512-VFpKcphNurJpSC4fpUfKL3GTXVoL53oytghGR30QIw5jKWwaT50HVbTyb41BLOUuZjmMhUQA8weiQEew6RX0gw==
dependencies:
- "@storybook/theming" "8.6.14"
+ "@storybook/theming" "8.6.15"
better-opn "^3.0.2"
browser-assert "^1.2.1"
esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0"
@@ -8940,6 +8940,11 @@
resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.6.14.tgz#78c6dc878f705de70c67f2b2d08b8313b985d81a"
integrity sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==
+"@storybook/theming@8.6.15":
+ version "8.6.15"
+ resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.6.15.tgz#781e6b36f113a10e76379956b9451276e8d5bda2"
+ integrity sha512-dAbL0XOekyT6XsF49R6Etj3WxQ/LpdJDIswUUeHgVJ6/yd2opZOGbPxnwA3zlmAh1c0tvpPyhSDXxSG79u8e4Q==
+
"@storybook/types@7.0.20":
version "7.0.20"
resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.0.20.tgz#6aadc565f5894512b7f8da2aea9cac9448160519"
@@ -9643,18 +9648,18 @@
dependencies:
long-timeout "^0.1.1"
-"@tryghost/color-utils@0.2.10":
- version "0.2.10"
- resolved "https://registry.yarnpkg.com/@tryghost/color-utils/-/color-utils-0.2.10.tgz#91e5185a04275b2462720080868bf69b7aa651c5"
- integrity sha512-7m1ylcy+k5CMHG7oAAKVwxkhetzYPW0jFGmx3ryZZk1mJgaKVAg552EJ/kWQ5pBOX2Nkbdq1CVAgXmlFLLQ+oA==
+"@tryghost/color-utils@0.2.16":
+ version "0.2.16"
+ resolved "https://registry.yarnpkg.com/@tryghost/color-utils/-/color-utils-0.2.16.tgz#4749a70abfd9f52f8dd96e4831752b4f0b08be2e"
+ integrity sha512-MFHLGIdT+mDimcvziHrvCivyZn5gbfNloLji9YwFAGOB3EGuh2WhGSdH47k9JEmZjQW5ihNr1WU1Fwi/m8zgXw==
dependencies:
- "@types/color" "3.0.6"
- color "^3.2.1"
+ "@types/color" "4.2.0"
+ color "3.2.1"
-"@tryghost/config-url-helpers@1.0.17":
- version "1.0.17"
- resolved "https://registry.yarnpkg.com/@tryghost/config-url-helpers/-/config-url-helpers-1.0.17.tgz#558594d87e7dcbdcdf17513074957ad6fe58b92b"
- integrity sha512-Cx76ZHIHHdS+xaayET/Yf6bO4XNjPhSrsOR1H1TBRu8fB7Qg/9AmVsyYM8xzFGyJ4TfROBshMiLNtEK1zPIGlA==
+"@tryghost/config-url-helpers@1.0.23":
+ version "1.0.23"
+ resolved "https://registry.yarnpkg.com/@tryghost/config-url-helpers/-/config-url-helpers-1.0.23.tgz#a1c5b010562d7252566f9d89c789fb8381b76c47"
+ integrity sha512-cknxQMmqhehtU9dMtlbyenXldWbhuxwUFl7Vzczq02yD6SO41UFvACq4ZhPGS5vb3mSPFCm8/OojHp5zxquAhg==
"@tryghost/config@2.0.3":
version "2.0.3"
@@ -9664,17 +9669,17 @@
"@tryghost/root-utils" "^2.0.3"
nconf "0.13.0"
-"@tryghost/content-api@1.12.0":
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/@tryghost/content-api/-/content-api-1.12.0.tgz#8242b32411eba4907c953c0c07f4761a3140a271"
- integrity sha512-rU9yrBHlVIohOLSpC9PeH9evMeNCk4OKGvI0VEwNwuwWlsQIpBn3o79DzleEN0tbMynlObYAG0IJ/EGkIumtJA==
+"@tryghost/content-api@1.12.6":
+ version "1.12.6"
+ resolved "https://registry.yarnpkg.com/@tryghost/content-api/-/content-api-1.12.6.tgz#0a25d8b3cc16e18100e8471262285c44bee6b3e0"
+ integrity sha512-QCsSG10onLqpXKN7F8yHefOgRBtWdmi30s2dV7BYY5+/Iwgsaf/o/U5oTQhlsGkO3P73Zfw++tnqOL2wO9IYUA==
dependencies:
- axios "^1.0.0"
+ axios "1.13.6"
-"@tryghost/custom-fonts@1.0.2":
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/@tryghost/custom-fonts/-/custom-fonts-1.0.2.tgz#fc9471abf914f83b74df4fd1c220759aabf7bb1d"
- integrity sha512-bLRJCxguFV6c7BpeR3KIGyZ5f4ic2TgEE7E4WWf7b6nHnW+RWylvRdWA+KW7iZ7iWdUrjqQTKLwC6GdmeWbgnQ==
+"@tryghost/custom-fonts@1.0.8":
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@tryghost/custom-fonts/-/custom-fonts-1.0.8.tgz#db497e0bd6e675d35ba1f69ec2e6e0fb5ef300e3"
+ integrity sha512-56epGhRXXk1QfKYxzyvnm7OCszdlWmMbw9XYq1w5L/67mPoQPX+4NkkNmZqlq/0CjNahzExOB0nOm7aHVDwvWQ==
"@tryghost/database-info@0.3.22":
version "0.3.22"
@@ -9716,10 +9721,10 @@
"@tryghost/debug" "^0.1.36"
split2 "4.2.0"
-"@tryghost/email-mock-receiver@0.3.11":
- version "0.3.11"
- resolved "https://registry.yarnpkg.com/@tryghost/email-mock-receiver/-/email-mock-receiver-0.3.11.tgz#3ff3e23d0b755480b2c756d1018ee5ece5b1e04e"
- integrity sha512-HnYOfGw7uRx48KDwUvWvWqHYzvadRqOcdpXm1d6SVo4SS2e6Mjyocnid73DHWMmfKb2FSSw2Yza3GGvAbZfRKg==
+"@tryghost/email-mock-receiver@0.3.16":
+ version "0.3.16"
+ resolved "https://registry.yarnpkg.com/@tryghost/email-mock-receiver/-/email-mock-receiver-0.3.16.tgz#89ea4d2a40a6258dd9261f7e3e16e0f7607e6453"
+ integrity sha512-C72ZeaZa4eCZ4JSIY3BW4UhfBo34UA2O2+jEO7UMCsMT5AAIstv3oQgtj/kLZraFDaNtMOXdsUJA+gQDUTzBOA==
"@tryghost/ember-promise-modals@2.0.1":
version "2.0.1"
@@ -9737,7 +9742,7 @@
focus-trap "^6.7.2"
postcss-preset-env "^7.3.1"
-"@tryghost/errors@1.3.13", "@tryghost/errors@1.3.6", "@tryghost/errors@2.2.1", "@tryghost/errors@3.0.3", "@tryghost/errors@^1.2.26", "@tryghost/errors@^1.2.3", "@tryghost/errors@^1.3.7", "@tryghost/errors@^1.3.8", "@tryghost/errors@^1.3.9", "@tryghost/errors@^3.0.3":
+"@tryghost/errors@1.3.13", "@tryghost/errors@1.3.6", "@tryghost/errors@2.2.1", "@tryghost/errors@3.0.3", "@tryghost/errors@^1.2.3", "@tryghost/errors@^1.3.7", "@tryghost/errors@^1.3.8", "@tryghost/errors@^1.3.9", "@tryghost/errors@^3.0.3":
version "1.3.13"
resolved "https://registry.yarnpkg.com/@tryghost/errors/-/errors-1.3.13.tgz#e604160bd5a4b26b6c30cdc82dad22d9ce892dce"
integrity sha512-sXFcuU8Nn3mDcVrLBLFThQZImn+T2w7v/jJGJzdFnSKJstqxd1LyTRlMjpCpgCnqAgHFCaP+uFg7x4CX64VBJQ==
@@ -9745,23 +9750,23 @@
"@stdlib/utils-copy" "^0.2.0"
uuid "^9.0.0"
-"@tryghost/express-test@0.15.0":
- version "0.15.0"
- resolved "https://registry.yarnpkg.com/@tryghost/express-test/-/express-test-0.15.0.tgz#173776f2e58899786ea2f9d607114ac6da14bcf4"
- integrity sha512-NdKLIhW8hVBtzpS0GjGSfyqqUA8hpHIMDyKAJmNOH4PHr1ytvt4NSzGoGnm8GJ9PpdJ/W12VOvzYUGnxKfY1ww==
+"@tryghost/express-test@0.15.5":
+ version "0.15.5"
+ resolved "https://registry.yarnpkg.com/@tryghost/express-test/-/express-test-0.15.5.tgz#4540d2d125517923e3d838d093c8b7178102a393"
+ integrity sha512-a50AsvAjqMBP4UfEF+/2+ljPQ/oMA0rHSeoCk8Wwepp9P13Q+3Vl1mK5OjOfoBduhMYa/3kU+ABHeRrUqoiMxw==
dependencies:
- "@tryghost/jest-snapshot" "^0.5.18"
+ "@tryghost/jest-snapshot" "^0.5.19"
cookiejar "^2.1.3"
form-data "^4.0.2"
mime-types "^3.0.1"
reqresnext "^1.7.0"
-"@tryghost/helpers@1.1.97":
- version "1.1.97"
- resolved "https://registry.yarnpkg.com/@tryghost/helpers/-/helpers-1.1.97.tgz#f8c004850de10cee25fb396680debfb70e28b5e8"
- integrity sha512-kuFO46X1cy4ezrI19qK0ZjUvbtPAMZjc4pFcLhe6IPVtziajBd9+4/7qrGaBIzbK5FV+v+WN1POU4vMx7hIPbw==
+"@tryghost/helpers@1.1.103":
+ version "1.1.103"
+ resolved "https://registry.yarnpkg.com/@tryghost/helpers/-/helpers-1.1.103.tgz#a6883b7741f16e1fe27549d2e9a0562db1fa7842"
+ integrity sha512-ako7nvUKySOaTMSZXUXnrg6pVTkxW1ZVKbJj0t0HGG+ndt0pjLBdnzdZW3BMGEj4Qvf0MWxGdUcLrW/OFyHzsg==
dependencies:
- lodash-es "^4.17.11"
+ lodash-es "4.17.23"
"@tryghost/html-to-mobiledoc@3.2.23":
version "3.2.23"
@@ -9772,13 +9777,13 @@
"@tryghost/mobiledoc-kit" "^0.12.4-ghost.1"
jsdom "^29.0.0"
-"@tryghost/html-to-plaintext@1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@tryghost/html-to-plaintext/-/html-to-plaintext-1.0.4.tgz#e817906b34a23fefd391aee670eabafe41cee8ec"
- integrity sha512-NcB5xaqEYrNAZVBFje+tI7zwWOR+CErqPEz61PebfdLe2oiVnWl85g35mgcyrGUNsZp4+Y64o6YhEZ7H4dNFlg==
+"@tryghost/html-to-plaintext@1.0.8":
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@tryghost/html-to-plaintext/-/html-to-plaintext-1.0.8.tgz#d00424d6a6dc5e329c83c8661dd75fa3c684f916"
+ integrity sha512-CIXoOlmpp9SVrb0BPQ/+cBaSHFpGv53Gew3VFLw0w1v1q04+0e0FRKjl8Cv6oUl+c1I9LwxbwdcV6rxRCgVbIw==
dependencies:
html-to-text "8.2.1"
- lodash "4.17.21"
+ lodash "4.17.23"
"@tryghost/http-cache-utils@0.1.25", "@tryghost/http-cache-utils@^0.1.21":
version "0.1.25"
@@ -9803,14 +9808,14 @@
optionalDependencies:
sharp "^0.34.5"
-"@tryghost/jest-snapshot@^0.5.18":
- version "0.5.18"
- resolved "https://registry.yarnpkg.com/@tryghost/jest-snapshot/-/jest-snapshot-0.5.18.tgz#a35882500d2a4470c670cd2ce7011628f9aa9d34"
- integrity sha512-sc4Q3OsCBcjiC8AbEwgXHPwWdqu8/2MCCUYsoL1tQ7nVZdxOYGI4qfdCybaFLhMOYiQzSoHW8WZs3TsmpVEezA==
+"@tryghost/jest-snapshot@^0.5.19":
+ version "0.5.23"
+ resolved "https://registry.yarnpkg.com/@tryghost/jest-snapshot/-/jest-snapshot-0.5.23.tgz#e7dc239770d73060ca5b8ca1badef671a750fe6c"
+ integrity sha512-rhAkxKKlY2NB2+CGdXjY+aAsWA3xrZiR3yfTK+gnTRstuSR9bq8AU26oxE0L0zNCw0myTVF0WiyElCZ+e/4Gvw==
dependencies:
"@jest/expect" "^28.0.1"
"@jest/expect-utils" "^28.0.1"
- "@tryghost/errors" "^1.3.8"
+ "@tryghost/errors" "^1.3.9"
jest-snapshot "^29.0.0"
"@tryghost/job-manager@1.0.9":
@@ -10022,14 +10027,14 @@
resolved "https://registry.yarnpkg.com/@tryghost/koenig-lexical/-/koenig-lexical-1.7.28.tgz#8170b20079c724169f4d7056886ccaeee812aabc"
integrity sha512-81irvOeur1YsQxg6dpU/Ch0s8j8io3b0Dg0wo8F27aJJp/acfaJnVPN4jCndkylNjfYNQ3T1hqY9IFufi0McNA==
-"@tryghost/limit-service@1.4.1":
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/@tryghost/limit-service/-/limit-service-1.4.1.tgz#9a010dbe19215017ade6e144769775537bfa7274"
- integrity sha512-Oxs4+u/5TQW56uf9DOWnhN22lmY5xibtZm2F36IwKWxbkeQtdqplAZj0nyiEeDrqO4Tyz+8cIGof2ceOG2kqZQ==
+"@tryghost/limit-service@1.5.2":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@tryghost/limit-service/-/limit-service-1.5.2.tgz#d14ddb87b8eb042df0c4afd772e6a08a9a7e67fa"
+ integrity sha512-BTSnMpVMRauSkxi0yL/V2qVy9nRlAL9maALFAe5MDNTSCvg4zjV2b2S4o6+tgCyGDRkMPeePfrgSuH2YTTbD5Q==
dependencies:
- "@tryghost/errors" "^1.2.26"
- lodash "^4.17.21"
- luxon "^1.26.0"
+ "@tryghost/errors" "2.2.1"
+ lodash "4.17.23"
+ luxon "3.7.2"
"@tryghost/logging@2.4.19", "@tryghost/logging@2.5.5", "@tryghost/logging@4.0.3", "@tryghost/logging@^2.5.1", "@tryghost/logging@^4.0.3":
version "2.5.5"
@@ -10048,10 +10053,10 @@
json-stringify-safe "^5.0.1"
lodash "^4.17.21"
-"@tryghost/members-csv@2.0.3":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@tryghost/members-csv/-/members-csv-2.0.3.tgz#6affa02dd158ff5c01fd420774ddd59b69c51824"
- integrity sha512-zBE0FHcolH0MjkCh+z5sv9Gf7MJ5ZxfG0hwlGks1ICVSn1p0dwK260PayzBIGWaHC7FzWIHY5ZgGltUE/lPXkQ==
+"@tryghost/members-csv@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@tryghost/members-csv/-/members-csv-2.0.5.tgz#cb01f6ad7f3c7a85ebc26d77a0b176e9c6e682a6"
+ integrity sha512-5BMzhWSoJg+pOQuXdO8ygHDxLFcwZLob903NX7lprWQtooLPD8FAWwdFql/ZA7gPG5Bq9lV7TyUFK3hWVtvIlw==
dependencies:
fs-extra "11.3.0"
lodash "4.17.21"
@@ -10248,13 +10253,6 @@
resolved "https://registry.yarnpkg.com/@tryghost/social-urls/-/social-urls-0.1.60.tgz#1b90c1c233264c7b8cfd477789d70de2c2610f61"
integrity sha512-lbhdaIwV6XrhyML+ugarYKn2BDam3c/LsLYyezTFZGtFUWmJgm/DvOY2Trd2YATi7iLifLsWhXGhIr5v+hKL3w==
-"@tryghost/string@0.2.17":
- version "0.2.17"
- resolved "https://registry.yarnpkg.com/@tryghost/string/-/string-0.2.17.tgz#c5c548865100a4a0ff7cfe854eb49f1bd90e268f"
- integrity sha512-c7/uco8GpUw+tohWtFr0R/zlHHvyXLX3g6+HX3Y52GLTjKsspc0N5GF7l5Y9I0+rwMBcBz9DCWMsTGeLgQBPtQ==
- dependencies:
- unidecode "^0.1.8"
-
"@tryghost/string@0.2.21":
version "0.2.21"
resolved "https://registry.yarnpkg.com/@tryghost/string/-/string-0.2.21.tgz#7294e3fb9dad595b6e180f8bbe75c33845dc45de"
@@ -10262,10 +10260,17 @@
dependencies:
unidecode "^0.1.8"
-"@tryghost/timezone-data@0.4.12":
- version "0.4.12"
- resolved "https://registry.yarnpkg.com/@tryghost/timezone-data/-/timezone-data-0.4.12.tgz#c8a63979a073fe7ca9a85af4fcf255ff73a13859"
- integrity sha512-oUDQyYP3sxpC1/ndT15tfGHx50YqIC1ovktyEkS/1f04+H5+bPiCgCLu/Dvi63u4Jc1GTEcTvHoRqTngpA+mZw==
+"@tryghost/string@0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@tryghost/string/-/string-0.3.2.tgz#a86773fe460e198a7176e7333d1225d6319c9060"
+ integrity sha512-tPgTU4o/4m1TBMoSChHm4n7XvXq+x6GJ//B0MdVPK57Rb0GEThsV347C2Fr5+1q71EdICrLbFPYh0vAqEM/eoA==
+ dependencies:
+ unidecode "1.1.0"
+
+"@tryghost/timezone-data@0.4.18":
+ version "0.4.18"
+ resolved "https://registry.yarnpkg.com/@tryghost/timezone-data/-/timezone-data-0.4.18.tgz#a5a2d2ed33cc82c9a207dd8575fbc0d813020e60"
+ integrity sha512-yawVt4pBmbsw2Uwsxd/8rjwyucQX6cefHH48X5Qe5eMQH3mnla5Q+gJ+By9a3Sza1qECvhIG3jUhDM3cLhILzQ==
"@tryghost/tpl@0.1.40", "@tryghost/tpl@^0.1.36":
version "0.1.40"
@@ -10311,10 +10316,10 @@
"@tryghost/root-utils" "^0.3.34"
semver "^7.3.5"
-"@tryghost/webhook-mock-receiver@0.2.17":
- version "0.2.17"
- resolved "https://registry.yarnpkg.com/@tryghost/webhook-mock-receiver/-/webhook-mock-receiver-0.2.17.tgz#4c72be56ca5471e8e599f16db3163955718a90a7"
- integrity sha512-XdKkBnwl+iqsS3CHVJQbdSJHrn3Shc4g2+B9X9lFciRmUW5dqKBkpK73qGwXPQdCOVIk6KxIhcXiUtTrmUrd9Q==
+"@tryghost/webhook-mock-receiver@0.2.22":
+ version "0.2.22"
+ resolved "https://registry.yarnpkg.com/@tryghost/webhook-mock-receiver/-/webhook-mock-receiver-0.2.22.tgz#0bd2a6fc76599ffb25385aaf67306a92025f0bb1"
+ integrity sha512-QthCC6nmXlDKzuhZkzdZOatpgbJlGcJS6Et7BMfHJ6z/56QA21iCC1nRyLa5oCbh21kXtWZpGvX/heRgu2g07Q==
dependencies:
p-wait-for "3.2.0"
@@ -10489,10 +10494,10 @@
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.2.tgz#bdeeb6fdcb78969033767951ab0cb26c7514a658"
integrity sha512-JWO/ZyxTKk0bLuOhAavGjnwLR73rUE7qzACnU7gMeyA/gdrSHm2xJwqNPipw2MtaZUaqQ2UG/q7pP6AQiZ8mqw==
-"@types/color@3.0.6":
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/@types/color/-/color-3.0.6.tgz#29c27a99d4de2975e1676712679a0bd7f646a3fb"
- integrity sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A==
+"@types/color@4.2.0":
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/@types/color/-/color-4.2.0.tgz#06b259b912a15080d6cd3be35fc265f16c802eae"
+ integrity sha512-6+xrIRImMtGAL2X3qYkd02Mgs+gFGs+WsK0b7VVMaO4mYRISwyTjcqNrO0mNSmYEoq++rSLDB2F5HDNmqfOe+A==
dependencies:
"@types/color-convert" "*"
@@ -12215,10 +12220,10 @@ ansi-regex@^5.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-ansi-regex@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
- integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+ansi-regex@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1"
+ integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==
ansi-styles@^2.2.1:
version "2.2.1"
@@ -12244,10 +12249,10 @@ ansi-styles@^5.0.0, ansi-styles@^5.2.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+ansi-styles@^6.1.0, ansi-styles@^6.2.1, ansi-styles@^6.2.3:
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041"
+ integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==
ansi-to-html@^0.6.15, ansi-to-html@^0.6.6:
version "0.6.15"
@@ -12784,7 +12789,16 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
-axios@^1.0.0, axios@^1.12.0, axios@^1.13.5, axios@^1.3.3, axios@^1.7.4:
+axios@1.13.6:
+ version "1.13.6"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.6.tgz#c3f92da917dc209a15dd29936d20d5089b6b6c98"
+ integrity sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==
+ dependencies:
+ follow-redirects "^1.15.11"
+ form-data "^4.0.5"
+ proxy-from-env "^1.1.0"
+
+axios@^1.12.0, axios@^1.13.5, axios@^1.3.3, axios@^1.7.4:
version "1.15.0"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.15.0.tgz#0fcee91ef03d386514474904b27863b2c683bf4f"
integrity sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==
@@ -15301,7 +15315,7 @@ chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@5.6.2, chalk@^5.0.0, chalk@^5.3.0, chalk@^5.4.1:
+chalk@5.6.2, chalk@^5.0.0, chalk@^5.3.0:
version "5.6.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea"
integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==
@@ -15678,13 +15692,13 @@ cli-table@^0.3.1:
dependencies:
colors "1.0.3"
-cli-truncate@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a"
- integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==
+cli-truncate@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-5.2.0.tgz#c8e72aaca8339c773d128c36e0a17c6315b694eb"
+ integrity sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==
dependencies:
- slice-ansi "^5.0.0"
- string-width "^7.0.0"
+ slice-ansi "^8.0.0"
+ string-width "^8.2.0"
cli-width@^2.0.0:
version "2.2.1"
@@ -15863,7 +15877,7 @@ color-support@^1.1.3:
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
-color@^3.0.0, color@^3.2.1:
+color@3.2.1, color@^3.0.0:
version "3.2.1"
resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164"
integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==
@@ -15958,10 +15972,10 @@ commander@^11.1.0, commander@~11.1.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
-commander@^13.1.0:
- version "13.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46"
- integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==
+commander@^14.0.3:
+ version "14.0.3"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2"
+ integrity sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==
commander@^2.19.0, commander@^2.20.0, commander@^2.6.0:
version "2.20.3"
@@ -21837,10 +21851,10 @@ get-caller-file@^2.0.5:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
-get-east-asian-width@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e"
- integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==
+get-east-asian-width@^1.0.0, get-east-asian-width@^1.3.1, get-east-asian-width@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz#ce7008fe345edcf5497a6f557cfa54bc318a9ce7"
+ integrity sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==
get-func-name@^2.0.1, get-func-name@^2.0.2:
version "2.0.2"
@@ -22134,10 +22148,10 @@ global-prefix@^3.0.0:
kind-of "^6.0.2"
which "^1.3.1"
-globals@16.5.0:
- version "16.5.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-16.5.0.tgz#ccf1594a437b97653b2be13ed4d8f5c9f850cac1"
- integrity sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==
+globals@17.4.0, globals@^17.3.0:
+ version "17.4.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-17.4.0.tgz#33d7d297ed1536b388a0e2f4bcd0ff19c8ff91b5"
+ integrity sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==
globals@^11.1.0:
version "11.12.0"
@@ -22161,11 +22175,6 @@ globals@^15.11.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8"
integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==
-globals@^17.3.0:
- version "17.3.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-17.3.0.tgz#8b96544c2fa91afada02747cc9731c002a96f3b9"
- integrity sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==
-
globals@^9.18.0:
version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
@@ -22327,12 +22336,12 @@ growly@^1.3.0:
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==
-gscan@5.4.0:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/gscan/-/gscan-5.4.0.tgz#6db83f49b0c7343836c7ca5bf07c40c534d255ec"
- integrity sha512-q0hksTZ2q7xlCi5i3OU61c4xukTruLvd/kwvay2l3WDLYYR/ZIg4TJITsb4aXYtre0ihM07NHrjyyLPBFMOSBQ==
+gscan@5.4.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/gscan/-/gscan-5.4.1.tgz#a9f5c6566529c70454dfa1bf9db7709f3373bb55"
+ integrity sha512-Fgzx/jmXDd2vjw6jZZhe6TwMwQjKlGUgIaxvHk0H22pVtJJaN92ctI0fdGE8q5rXCcH3OGzpQ6jvlnleS7RlNw==
dependencies:
- "@sentry/node" "10.43.0"
+ "@sentry/node" "10.46.0"
"@tryghost/config" "2.0.3"
"@tryghost/debug" "2.0.3"
"@tryghost/errors" "3.0.3"
@@ -23116,6 +23125,16 @@ import-in-the-middle@^2.0.0, import-in-the-middle@^2.0.6:
cjs-module-lexer "^2.2.0"
module-details-from-path "^1.0.4"
+import-in-the-middle@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-3.0.1.tgz#8a0a1230c9b865c0e12698171646ae1e3fff691d"
+ integrity sha512-pYkiyXVL2Mf3pozdlDGV6NAObxQx13Ae8knZk1UJRJ6uRW/ZRmTGHlQYtrsSl7ubuE5F8CD1z+s1n4RHNuTtuA==
+ dependencies:
+ acorn "^8.15.0"
+ acorn-import-attributes "^1.9.5"
+ cjs-module-lexer "^2.2.0"
+ module-details-from-path "^1.0.4"
+
import-lazy@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153"
@@ -23651,17 +23670,12 @@ is-fullwidth-code-point@^3.0.0:
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-is-fullwidth-code-point@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
- integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
-
-is-fullwidth-code-point@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704"
- integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==
+is-fullwidth-code-point@^5.0.0, is-fullwidth-code-point@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz#046b2a6d4f6b156b2233d3207d4b5a9783999b98"
+ integrity sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==
dependencies:
- get-east-asian-width "^1.0.0"
+ get-east-asian-width "^1.3.1"
is-generator-fn@^2.0.0:
version "2.1.0"
@@ -25733,21 +25747,17 @@ linkifyjs@^4.3.2:
resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.3.2.tgz#d97eb45419aabf97ceb4b05a7adeb7b8c8ade2b1"
integrity sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==
-lint-staged@15.5.2:
- version "15.5.2"
- resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.5.2.tgz#beff028fd0681f7db26ffbb67050a21ed4d059a3"
- integrity sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==
+lint-staged@16.4.0:
+ version "16.4.0"
+ resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-16.4.0.tgz#a00b0e3abff59239cef6d7d9341e8f8473308e23"
+ integrity sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==
dependencies:
- chalk "^5.4.1"
- commander "^13.1.0"
- debug "^4.4.0"
- execa "^8.0.1"
- lilconfig "^3.1.3"
- listr2 "^8.2.5"
- micromatch "^4.0.8"
- pidtree "^0.6.0"
+ commander "^14.0.3"
+ listr2 "^9.0.5"
+ picomatch "^4.0.3"
string-argv "^0.3.2"
- yaml "^2.7.0"
+ tinyexec "^1.0.4"
+ yaml "^2.8.2"
liquid-fire@0.34.0:
version "0.34.0"
@@ -25780,12 +25790,12 @@ liquid-wormhole@3.0.1:
ember-decorators "^6.1.1"
perf-primitives RobbieTheWagner/perf-primitives#a6a26f11497ca27be3763a88a5f20744e424756b
-listr2@^8.2.5:
- version "8.2.5"
- resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.2.5.tgz#5c9db996e1afeb05db0448196d3d5f64fec2593d"
- integrity sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==
+listr2@^9.0.5:
+ version "9.0.5"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.5.tgz#92df7c4416a6da630eb9ef46da469b70de97b316"
+ integrity sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==
dependencies:
- cli-truncate "^4.0.0"
+ cli-truncate "^5.0.0"
colorette "^2.0.20"
eventemitter3 "^5.0.1"
log-update "^6.1.0"
@@ -25896,10 +25906,10 @@ locate-path@^7.1.0:
dependencies:
p-locate "^6.0.0"
-lodash-es@4.17.21, lodash-es@^4.17.11, lodash-es@^4.17.15:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
- integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
+lodash-es@4.17.23, lodash-es@^4.17.11, lodash-es@^4.17.15:
+ version "4.17.23"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.23.tgz#58c4360fd1b5d33afc6c0bbd3d1149349b1138e0"
+ integrity sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==
lodash._baseassign@^3.0.0:
version "3.2.0"
@@ -26404,11 +26414,6 @@ luxon@3.7.2, luxon@^3.5.0:
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.7.2.tgz#d697e48f478553cca187a0f8436aff468e3ba0ba"
integrity sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==
-luxon@^1.26.0:
- version "1.28.0"
- resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf"
- integrity sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==
-
lz-string@^1.4.4, lz-string@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941"
@@ -27139,7 +27144,7 @@ minimatch@9.0.3:
dependencies:
brace-expansion "^2.0.1"
-minimatch@^10.0.3, minimatch@^10.2.1, minimatch@^10.2.2:
+minimatch@^10.2.1, minimatch@^10.2.2, minimatch@^10.2.4:
version "10.2.5"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1"
integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==
@@ -28206,10 +28211,10 @@ numbered@^1.1.0:
resolved "https://registry.yarnpkg.com/numbered/-/numbered-1.1.0.tgz#9fcd79564c73a84b9574e8370c3d8e58fe3c133c"
integrity sha512-pv/ue2Odr7IfYOO0byC1KgBI10wo5YDauLhxY6/saNzAdAs0r1SotGCPzzCLNPL0xtrAwWRialLu23AAu9xO1g==
-nwsapi@2.2.12, nwsapi@^2.2.0, nwsapi@^2.2.12:
- version "2.2.12"
- resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8"
- integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==
+nwsapi@2.2.23, nwsapi@^2.2.0, nwsapi@^2.2.12:
+ version "2.2.23"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.23.tgz#59712c3a88e6de2bb0b6ccc1070397267019cf6c"
+ integrity sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==
nx@22.0.4:
version "22.0.4"
@@ -29179,11 +29184,6 @@ picomatch@^4.0.2, picomatch@^4.0.3, picomatch@^4.0.4:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.4.tgz#fd6f5e00a143086e074dffe4c924b8fb293b0589"
integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==
-pidtree@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
- integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
-
pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -29269,17 +29269,17 @@ pkg-up@^3.1.0:
dependencies:
find-up "^3.0.0"
-playwright-core@1.58.2:
- version "1.58.2"
- resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.58.2.tgz#ac5f5b4b10d29bcf934415f0b8d133b34b0dcb13"
- integrity sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==
+playwright-core@1.59.1:
+ version "1.59.1"
+ resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.59.1.tgz#d8a2b28bcb8f2bd08ef3df93b02ae83c813244b2"
+ integrity sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==
-playwright@1.58.2:
- version "1.58.2"
- resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.58.2.tgz#afe547164539b0bcfcb79957394a7a3fa8683cfd"
- integrity sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==
+playwright@1.59.1:
+ version "1.59.1"
+ resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.59.1.tgz#f7b0ca61637ae25264cec370df671bbe1f368a4a"
+ integrity sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==
dependencies:
- playwright-core "1.58.2"
+ playwright-core "1.59.1"
optionalDependencies:
fsevents "2.3.2"
@@ -30683,6 +30683,11 @@ proxy-addr@^2.0.7, proxy-addr@~2.0.7:
forwarded "0.2.0"
ipaddr.js "1.9.1"
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
proxy-from-env@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba"
@@ -32901,14 +32906,6 @@ slice-ansi@^4.0.0:
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
-slice-ansi@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
- integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==
- dependencies:
- ansi-styles "^6.0.0"
- is-fullwidth-code-point "^4.0.0"
-
slice-ansi@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9"
@@ -32917,6 +32914,14 @@ slice-ansi@^7.1.0:
ansi-styles "^6.2.1"
is-fullwidth-code-point "^5.0.0"
+slice-ansi@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-8.0.0.tgz#22d0b66d18bc5c57f488bfcf36cbde3bef731537"
+ integrity sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==
+ dependencies:
+ ansi-styles "^6.2.3"
+ is-fullwidth-code-point "^5.1.0"
+
slick@^1.12.2:
version "1.12.2"
resolved "https://registry.yarnpkg.com/slick/-/slick-1.12.2.tgz#bd048ddb74de7d1ca6915faa4a57570b3550c2d7"
@@ -33388,12 +33393,12 @@ storybook@10.3.3:
use-sync-external-store "^1.5.0"
ws "^8.18.0"
-storybook@8.6.14:
- version "8.6.14"
- resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.6.14.tgz#d205e73b6427eebf321bcfbe63bfbec3ade4d9db"
- integrity sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==
+storybook@8.6.15:
+ version "8.6.15"
+ resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.6.15.tgz#eb4a3bae1ac0fe875bb322a412fac9709d9b5124"
+ integrity sha512-Ob7DMlwWx8s7dMvcQ3xPc02TvUeralb+xX3oaPRk9wY9Hc6M1IBC/7cEoITkSmRS2v38DHubC+mtEKNc1u2gQg==
dependencies:
- "@storybook/core" "8.6.14"
+ "@storybook/core" "8.6.15"
stream-browserify@^2.0.1:
version "2.0.2"
@@ -33543,6 +33548,14 @@ string-width@^7.0.0:
get-east-asian-width "^1.0.0"
strip-ansi "^7.1.0"
+string-width@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-8.2.0.tgz#bdb6a9bd6d7800db635adae96cdb0443fec56c42"
+ integrity sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==
+ dependencies:
+ get-east-asian-width "^1.5.0"
+ strip-ansi "^7.1.2"
+
string.prototype.matchall@^4.0.12, string.prototype.matchall@^4.0.5, string.prototype.matchall@^4.0.6:
version "4.0.12"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0"
@@ -33667,12 +33680,12 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
-strip-ansi@^7.0.1, strip-ansi@^7.1.0:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+strip-ansi@^7.0.1, strip-ansi@^7.1.0, strip-ansi@^7.1.2:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.2.0.tgz#d22a269522836a627af8d04b5c3fd2c7fa3e32e3"
+ integrity sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==
dependencies:
- ansi-regex "^6.0.1"
+ ansi-regex "^6.2.2"
strip-bom@^3.0.0:
version "3.0.0"
@@ -34485,7 +34498,7 @@ tinyexec@^0.3.2:
resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2"
integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==
-tinyexec@^1.0.2:
+tinyexec@^1.0.2, tinyexec@^1.0.4:
version "1.1.1"
resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-1.1.1.tgz#e1ff45dfa60d1dedb91b734956b78f6c2a3e821b"
integrity sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==
@@ -35244,6 +35257,11 @@ unicorn-magic@^0.3.0:
resolved "https://registry.yarnpkg.com/unicorn-magic/-/unicorn-magic-0.3.0.tgz#4efd45c85a69e0dd576d25532fbfa22aa5c8a104"
integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==
+unidecode@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-1.1.0.tgz#0b5f5ddd9b7b1ce3dbc7a24c72150edd63a83a8c"
+ integrity sha512-GIp57N6DVVJi8dpeIU6/leJGdv7W65ZSXFLFiNmxvexXkc0nXdqUvhA/qL9KqBKsILxMwg5MnmYNOIDJLb5JVA==
+
unidecode@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-0.1.8.tgz#efbb301538bc45246a9ac8c559d72f015305053e"
@@ -36659,10 +36677,10 @@ yaml@^1.10.0:
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
-yaml@^2.4.2, yaml@^2.6.0, yaml@^2.7.0:
- version "2.8.1"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79"
- integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==
+yaml@^2.4.2, yaml@^2.6.0, yaml@^2.8.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.3.tgz#a0d6bd2efb3dd03c59370223701834e60409bd7d"
+ integrity sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==
yargs-parser@21.1.1, yargs-parser@^21.1.1:
version "21.1.1"