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 @@ - + - {{buttonText}} + {{buttonText}}

{{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) }} {{#if feedbackButtons }} - {{> feedbackButton feedbackButtons href=feedbackButtons.likeHref buttonText='More like this' iconUrl="https://static.ghost.org/v5.0.0/images/more-like-this-mobile.png" width="42" height="42" }} - {{> feedbackButton feedbackButtons href=feedbackButtons.dislikeHref buttonText='Less like this' iconUrl="https://static.ghost.org/v5.0.0/images/less-like-this-mobile.png" width="42" height="42" }} + {{> feedbackButton feedbackButtons href=feedbackButtons.likeHref buttonText='More like this' iconUrl="https://static.ghost.org/v5.0.0/images/more-like-this-mobile.png" width="42" height="42" cellWidth=feedbackButtonCellWidth }} + {{> feedbackButton feedbackButtons href=feedbackButtons.dislikeHref buttonText='Less like this' iconUrl="https://static.ghost.org/v5.0.0/images/less-like-this-mobile.png" width="42" height="42" cellWidth=feedbackButtonCellWidth }} {{/if}} {{#if newsletter.showCommentCta}} - {{> feedbackButton href=post.commentUrl buttonText='Comment' iconUrl="https://static.ghost.org/v5.0.0/images/comment-mobile.png" width="42" height="42"}} + {{> feedbackButton href=post.commentUrl buttonText='Comment' iconUrl="https://static.ghost.org/v5.0.0/images/comment-mobile.png" width="42" height="42" cellWidth=feedbackButtonCellWidth }} + {{/if}} + {{#if post.shareUrl}} + {{> feedbackButton href=post.shareUrl buttonText='Share' iconUrl="https://static.ghost.org/v6.0.0/images/share-mobile.png" width="42" height="42" cellWidth=feedbackButtonCellWidth}} {{/if}} 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}}

+ + + + + + +
+ + + + + + +
+ Send to recipient +
+
- - + +
-

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

+

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"