Commit Graph

37343 Commits

Author SHA1 Message Date
Simon Backx
32d0d2b293 Added filter to filter members by email disabled
fixes GRO-23

Co-authored-by: Djordje Vlaisavljevic <dzvlais@gmail.com>
Co-authored-by: Sag <guptazy@gmail.com>
2023-11-16 19:16:20 +01:00
Sag
69ee4a5ff5
Added option to unsubscribe in one-click from emails (#19032)
refs https://github.com/TryGhost/Product/issues/4051
- added a "List-Unsubscribe" header to emails, in compliance with the
RFC 8058 requirements
- Gmail, Apple Mail, Yahoo Mail, and other popular email clients offer
an option to unsubscribe in one-click, based on the "List-Unsubscribe"
header. Some require an HTTPS endpoint, some a mailto address; both
options are provided in the "List-Unsubscribe" header

Co-authored-by: Simon Backx <simon@ghost.org>
Co-authored-by: Djordje Vlaisavljevic <dzvlais@gmail.com>
2023-11-16 14:50:24 -03:00
Steve Larson
40a859023f
Updated editor package (#19030)
closes TryGhost/Product#4160
- updated shortcut handling, this brings the sidebar shortcuts in line
2023-11-16 17:24:06 +00:00
Djordje Vlaisavljevic
6a443e431a Changed filter copy
fixes GRO-46
2023-11-16 16:52:16 +00:00
Steve Larson
7c1a13b88d
Updated editor shortcuts menu (#19027)
refs TryGhost/Product#4160
- updated header to be ctrl+option/alt+1-5 for header to avoid conflict
with os behaviour
- updated strike to be ctrl+option/alt+u to avoid view source browser
behaviour
2023-11-16 15:04:23 +00:00
Daniel Lockyer
5acecf2cae ️ Improved GScan performance for themes with many partials
refs https://github.com/TryGhost/DevOps/issues/3
refs b6d8e0192a

- see referenced commit for full context but this should improve the
  theme check time for themes with a large number of files and partials
- locally, checking a particularly heavy theme goes from 5s to 1.7s with this
  commit, and the improvement is larger on slower machines
2023-11-16 13:55:57 +01:00
Sanne de Vries
e9e2b678c7
Updated Admin meta title to Ghost Admin – [site title] (#19023)
No ref
- In order to make it easier to distinguish between Admin and site in
browser tabs, we've updated the meta title to include `Ghost Admin` in
the title.
2023-11-16 13:15:48 +01:00
Simon Backx
e3cdc24d6b
Added test to test default theme against linked gscan version (#19020)
fixes GRO-32

If we ever introduce errors in the linked source theme and linked gscan
version combination, this test will catch it.
2023-11-16 12:03:00 +00:00
Djordje Vlaisavljevic
a2cd4445f3 Updated copy
fixes GRO-35
2023-11-16 11:47:56 +00:00
Sodbileg Gansukh
63b2b439a7 Show the archived offers tab only when there's some 2023-11-16 19:37:22 +08:00
Sodbileg Gansukh
8377bd8410
Added Breadcrumbs toolbar option to PreviewModal in AdminX (#19016)
no issues

- currently there are urls and tabs as a toolbar option for the preview
modal
- as part of adding offers to AdminX, we needed a breadcrumbs option for
navigating between list and create/edit screens
- previewToolbarBreadcrumbs is used for passing an array with the type
BreadcrumbItem
- onBreadcrumbsBack is used for passing a function to be called when the
back button of the breadcrumbs is clicked
2023-11-16 19:26:25 +08:00
Ronald Langeveld
17f8844134
Wired up date-created to Offer Analytics (#19018)
no issue

---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖[[deprecated]](https://githubnext.com/copilot-for-prs-sunset)
Generated by Copilot at c7304ac</samp>

This pull request adds the `created_at` property to the `Offer` type and
displays it in the `EditOfferModal` component. This allows the admin to
see when an offer was created.
2023-11-16 18:05:24 +07:00
Simon Backx
3a78cf48c9
Fixed deleting session when requesting identity for invalid session (#19017)
ref https://ghost.slack.com/archives/C02G9E68C/p1700129928489809

- When the GET /api/session endpoint is called, the session is deleted
if it is invalid
- We don't have a body parser for this GET endoint, and the request
object was passed to the deleteSession handler. This caused a type error
(cannot read properties of undefined)
- We had dangling promise because deleteSession is async and wasn't
awaited, causing random errors in tests
- Added a test that would have caught this earlier
2023-11-16 11:01:50 +00:00
Ronald Langeveld
2bd597fe0d
Added createdAt prop to Offers API request. (#19012)
refs https://github.com/TryGhost/Product/issues/4153

- We need use the `created_at` timestamp in the new AdminX offers. The
API doesn't return that value.
- With this change the API returns the created_at property so that we
can consume it.
---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖[[deprecated]](https://githubnext.com/copilot-for-prs-sunset)
Generated by Copilot at dc282af</samp>

This pull request adds a `createdAt` property to the offer domain model,
data transfer object, and repository. This allows tracking and auditing
the creation and modification of offers and offer codes in
`ghost/offers`.
2023-11-16 17:33:01 +07:00
Simon Backx
e5f644c27f
🐛 Fixed contain/starts/endsWith filters with /, _ or % in them (#19015)
fixes GRO-25

Updated @tryghost/nql to 0.12.0 and other packages that depend on it

1. SQLite: when a filter string contains /.

When we use a NQL contain/starts/endsWith filter that contains a slash,
underlyingly the whole filter will get converted to a MongoDB query, in
which we just use a regexp to represent the filter. In here we will
escape the slash: \/ as expected in a regexp. Later when we convert this
MongoDB query back to knex/SQL, we use a SQL LIKE query. Currently we
don't remove the escaping here for a normal slash. MySQL seems to ignore
this (kinda incorrect). SQLite doesn't like it, and this breaks queries
on SQLite that use slashes. The solution here is simple: remove the
backslash escaping when converting the regexp to LIKE, just like we do
with other special regexp characters.

2. We don't escape % and _, which have a special meaning in LIKE queries

Usage of % and _ is now as expected and doesn't have the special SQL
meaning anymore.
2023-11-16 09:35:20 +00:00
Sodbileg Gansukh
6de3e85bd0 Fixed duplicate modals issue in offers AdminX
refs https://github.com/TryGhost/Product/issues/4138

- we should follow the same pattern as change modal flow for the Offers modals
- with the change theme flow, only one modal is shown at a time to make it feel like navigating inside one container modal
- this removes the container modal from OffersContainerModal and puts back the Modal component to each screens, so there will be no modal on top of another
2023-11-16 17:26:31 +08:00
Ronald Langeveld
9016d76d42
Unified Offers modals to a single modal (#19011)
refs https://github.com/TryGhost/Product/issues/4138


<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖[[deprecated]](https://githubnext.com/copilot-for-prs-sunset)
Generated by Copilot at b2390e4</samp>

Refactored the offers modal logic and routing in the admin-x-settings
app. Moved the offers modal components from `modals.tsx` to
`SettingsRouter.tsx` and `OffersContainerModal.tsx`. Replaced
`NiceModal` with `useModal` hook and simplified props and imports.
Enabled sub-routes for creating, editing, and viewing offers.
2023-11-16 06:56:06 +00:00
Sodbileg Gansukh
c88f4f24d3 Added static design of stats to offers edit screen in AdminX
refs https://github.com/TryGhost/Product/issues/4153
2023-11-16 11:04:06 +08:00
Chris Raible
2d8abb70ec
Removed RewriteFrames Sentry integration from admin (#19007)
refs
5f7c7a82dc

- The goal of the RewriteFrames plugin was to remove version identifiers
from the stack traces sent to Sentry, to improve the stack trace
grouping. That sort of worked, but it ended up breaking the sourcemaps
so the stack traces were ugly and hard to read within Sentry.
- This change removes the RewriteFrames plugin to fix the stack traces
again. Instead, planning to use Sentry's stack trace rules built into
the UI to fix the grouping.
2023-11-15 18:37:13 -08:00
Sodbileg Gansukh
3d945e539b
UI improvements for Offers in AdminX (#19008) 2023-11-16 10:09:09 +08:00
Steve Larson
d0fa385848
Added jpeg compression (#19006)
refs TryGhost/Product#4140
- bumped image-transform to add jpeg compression
2023-11-15 23:30:48 +00:00
Steve Larson
40a8e969b8
Revert "Bumped image transform package (#19003)" (#19004)
This reverts commit 557c01f48c.
2023-11-15 20:25:29 +00:00
Steve Larson
557c01f48c
Bumped image transform package (#19003)
refs TryGhost/Product#4140
- adds compression for jpeg > jpeg or any > jpeg asset generation
2023-11-15 19:14:23 +00:00
Simon Backx
75bb53f065
🔒 Added support for logging out members on all devices (#18935)
fixes https://github.com/TryGhost/Product/issues/3738
https://www.notion.so/ghost/Member-Session-Invalidation-13254316f2244c34bcbc65c101eb5cc4

- Adds the transient_id column to the members table. This defaults to
email, to keep it backwards compatible (not logging out all existing
sessions)
- Instead of using the email in the cookies, we now use the transient_id
- Updating the transient_id means invalidating all sessions of a member
- Adds an endpoint to the admin api to log out a member from all devices
- Added the `all` body property to the DELETE session endpoint in the
members API. Setting it to true will sign a member out from all devices.
- Adds a UI button in Admin to sign a member out from all devices
- Portal 'sign out of all devices' will not be added for now

Related changes (added because these areas were affected by the code
changes):
- Adds a serializer to member events / activity feed endpoints - all
member fields were returned here, so the transient_id would also be
returned - which is not needed and bloats the API response size
(`transient_id` is not a secret because the cookies are signed)
- Removed `loadMemberSession` from public settings browse (not used
anymore + bad pattern)

Performance tests on site with 50.000 members (on Macbook M1 Pro):
- Migrate: 6s (adding column 4s, setting to email is 1s, dropping
nullable: 1s)
- Rollback: 2s
2023-11-15 17:10:28 +01:00
Kevin Ansfield
3358ba305b
🐛 Fixed highlight formatting not showing in rendered posts (#18997)
closes https://github.com/TryGhost/Product/issues/4144

- bumped `@tryghost/kg-lexical-html-renderer` which adds highlight (`<mark>`) support
2023-11-15 14:08:14 +00:00
Daniel Lockyer
e2be6dbf14 Configured submodules to clone in performance tests
refs https://github.com/TryGhost/DevOps/issues/105

- we should include submodules in the checkout so the Ghost boot is
  representative of booting Ghost with a theme
2023-11-15 14:08:32 +01:00
Daniel Lockyer
9d2d1998d1 Updated lockfile 2023-11-15 14:02:19 +01:00
Simon Backx
41e7978897
Fixed mailto unsubscribe header to only unsubscribe current tags (#18995)
ref GRO-20

The currently set mailto variable would subscribe for all mailgun tags
instead of only the tags of the specific email.
2023-11-15 12:57:24 +00:00
Daniel Lockyer
566f2055d0 Moved GitHub context logging to job
- this stops the entire context from being output in the env vars, so it
  cleans up the output at the top of each job
2023-11-15 13:54:20 +01:00
Daniel Lockyer
18afd39193 Removed NODE_ENV env var from perf tests
refs 05977d5c26

- this seems to break things, will investigate once this is merged
- also adds showing output flag so debugging is easier
2023-11-15 13:35:41 +01:00
Kevin Ansfield
26554bc206
Improved lexical render performance (#18967)
closes https://github.com/TryGhost/Product/issues/4133

- we were creating a new JSDOM instance every time we rendered a card which lowered performance because JSDOM instantiation is heavy
- updated Koenig packages to remove the need for passing in an external `createDocument` option method as they now re-use the renderer's internal single instance of JSDOM
2023-11-15 12:33:22 +00:00
Daniel Lockyer
05977d5c26 Added boot time performance test to CI
refs https://github.com/TryGhost/DevOps/issues/105

- this will run a small benchmark on the boot time for Ghost, and push
  the stats to another repository which has GitHub Pages enabled, so we
  can visualise the change over time
- will only run on pushes to `main` so we don't pollute the stats with
  commits from PRs
- just a test for now to see if we get stable numbers
2023-11-15 13:24:56 +01:00
Jono M
99765206c1
Fixed small UI bugs from the AdminX design system migration (#18991)
no issue

---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖 Generated by Copilot at a19dd1f</samp>

Refactored the email settings UI for default recipients by reusing and
adapting the Twitter settings UI. Removed an unnecessary prop from the
`ImageUpload` component.
2023-11-15 11:57:55 +00:00
renovate[bot]
4651ef3d9b Update sentry-javascript monorepo to v7.80.1 2023-11-15 12:31:56 +01:00
Rene AHONBO
c404784573
Added missing semicolons (#18670)
Co-authored-by: Daniel Lockyer <daniellockyer@fastmail.com>
2023-11-15 12:19:50 +01:00
Ronald Langeveld
44b4b169a9
Fixed duration options for yearly cadence (#18989)
no issue

---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖 Generated by Copilot at b84f2a0</samp>

This change improves the offer creation modal by filtering the duration
options based on the tier's cadence. This avoids showing irrelevant or
invalid options to the user and simplifies the selection process.
2023-11-15 16:36:55 +07:00
Daniel Lockyer
199baacfd5 Improved error message for yarn dev
refs https://github.com/TryGhost/DevOps/issues/104

- added colors and better messages to help when the script fails
2023-11-15 10:34:34 +01:00
renovate[bot]
14741b1521 Update dependency @embroider/macros to v1.13.3 2023-11-15 10:28:28 +01:00
renovate[bot]
4aa8faa70d Update dependency @tailwindcss/forms to v0.5.7 2023-11-15 10:28:04 +01:00
Daniel Lockyer
76672e3e15 Improved output from dev script
refs https://github.com/TryGhost/DevOps/issues/104

- added a single line outputting what projects we're running
- removed line for Stripe token fetching
2023-11-15 10:11:22 +01:00
Daniel Lockyer
54e1b6002d Switched to Nx for more project commands
refs https://github.com/TryGhost/DevOps/issues/104

- this should marginally speed things up because we don't have to go
  through `yarn`, which is notoriously slow
2023-11-15 10:11:22 +01:00
Daniel Lockyer
ee804fc7af Hidden "info" Vite output unless in CI
refs https://github.com/TryGhost/DevOps/issues/104

- `info` is very verbose as it prints all files and their sizes
- we often don't care about this, so we can do away with `info` in favor
  of `warn`
2023-11-15 10:11:22 +01:00
Ronald Langeveld
ec5b766aaa
Wired up success modal to Admin X (#18987)
refs https://github.com/TryGhost/Product/issues/4148

---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖 Generated by Copilot at e982c03</samp>

This pull request adds a new feature to create and share offers in the
admin-x-settings app. It fixes a bug in the `AddOfferModal` component,
and enhances the `OfferSuccess` component to show and copy the offer
link, and provide social sharing options. It also updates the
`SettingsRouter` component to handle the offer id parameter in the
success route.
2023-11-15 08:29:01 +00:00
renovate[bot]
ab4a21db49 Update babel monorepo to v7.23.3 2023-11-15 09:23:45 +01:00
Daniel Lockyer
53157f3c40 Disabled reporting compressed gzip size
refs https://vitejs.dev/config/build-options.html#build-reportcompressedsize

- this should make building a little bit quicker because it doesn't have
  to calculate the gzip size (I don't think we're likely to hit this
  because we don't have large projects, but it's still nice to clean up
  the output)
2023-11-15 09:11:12 +01:00
Ronald Langeveld
fb3eb3ac5c
Added Portal Preview to Edit Page - Offers X (#18985)
refs https://github.com/TryGhost/Product/issues/4150

---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖 Generated by Copilot at bced508</samp>

This pull request improves the offer modal UI and functionality by using
consistent values for discount amount types, adding a portal preview
feature, and fixing some bugs and syntax errors in the code. The changes
affect the files `AddOfferModal.tsx`, `EditOfferModal.tsx`, and
`getOffersPortalPreviewUrl.ts`.
2023-11-15 14:52:32 +07:00
Sodbileg Gansukh
a083ce35b9 Added static design to success screen to offers in AdminX
refs https://github.com/TryGhost/Product/issues/4149
2023-11-15 14:58:19 +08:00
Sodbileg Gansukh
0a3db4cab6
Design details for the offers list layout in AdminX (#18983)
refs https://github.com/TryGhost/Product/issues/4137
2023-11-15 05:31:25 +00:00
Ronald Langeveld
49e96e1c18
Added basic offers modal for design (#18982)
refs https://github.com/TryGhost/Product/issues/4148

---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖 Generated by Copilot at e683919</samp>

This pull request adds a new modal component for showing a success
message after creating or editing an offer in the growth settings. It
updates the `modals.tsx`, `SettingsRouter.tsx`, and `OfferSuccess.tsx`
files to implement the new component and its route.
2023-11-15 05:19:48 +00:00
Ronald Langeveld
452e702530
Wired up DB to new Offers Modal (#18980)
refs https://github.com/TryGhost/Product/issues/4147

---

<!-- Leave the line below if you'd like GitHub Copilot to generate a
summary from your commit -->
<!--
copilot:summary
-->
### <samp>🤖 Generated by Copilot at b18d725</samp>

This pull request adds the functionality to create new offers for
members in the admin-x-settings app. It uses custom hooks to handle the
form logic and the API mutation, and updates the type definitions and
the UI components accordingly. It also modifies the `offers.ts` file in
the admin-x-framework to support the new feature.

---------

Co-authored-by: Chris Raible <chris@ghost.org>
Co-authored-by: Sodbileg Gansukh <sodbileg.gansukh@gmail.com>
2023-11-15 04:52:58 +00:00