0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-03 23:00:14 -05:00
Commit graph

40309 commits

Author SHA1 Message Date
Fabien "egg" O'Carroll
d6d5838bcd Removed usage of deferred 2025-02-03 12:39:39 +07:00
Fabien "egg" O'Carroll
670440cecd Ensured parallel reads from cache only fetch data once 2025-02-03 12:39:39 +07:00
Fabien "egg" O'Carroll
071f299408 Moved get logic into private method 2025-02-03 12:39:39 +07:00
Fabien "egg" O'Carroll
9a62ee5e44 Added deferred impl 2025-02-03 12:39:39 +07:00
Fabien "egg" O'Carroll
9790cd3583 Added breaking test 2025-02-03 12:39:35 +07:00
Ghost CI
e4b8c72f3e v5.109.0 2025-01-31 15:07:50 +00:00
renovate[bot]
b66a8f8970 Update dependency @tryghost/koenig-lexical to v1.5.2 2025-01-31 09:37:52 +00:00
Chris Raible
376b9209c3
Added ability to disable Newsletter clicks toggle in settings (#22090)
ref
https://linear.app/ghost/issue/ENG-1974/create-config-option-to-forcibly-disable-email-track-clicks

- With the ability to override a setting via configuration, we also need
to disable the setting's toggle in the UI to signal to the user that it
cannot be changed.
- This commit sets `disabled: true` on the `Newsletter clicks` toggle if
`is_read_only` is set to `true` on the `email_track_clicks` setting
returned from the API, and establishes a pattern that we can use for
other settings in the future, if desired.
2025-01-30 17:06:17 -08:00
Chris Raible
3ee9f43f6c
Added ability to override settings via config (#22089)
ref
https://linear.app/ghost/issue/ENG-1974/create-config-option-to-forcibly-disable-email-track-clicks

- We want to have the ability to turn off click tracking for sites that
are adversely impacted by massive bursts of traffic from email link
checkers, but we don't currently have a pattern for this.
- This commit introduces a new configuration parameters
`hostSettings:settingsOverrides`, which accepts key/value pairs of
settings keys -> values. The value passed in here will override whatever
value is set for the associated setting key in the database
- It also adds an `is_read_only: true` property to any setting that is
overridden, which is included in the /api/admin/settings endpoint. This
value can be used by the frontend to disable the control to prevent a
user from trying to change the value.
- The value in the database is preserved, as the override is implemented
in the settings cache `get()` and `getAll()` methods.
- This commit only includes the backend changes — another commit will
follow to allow disabling the 'Newsletter clicks' toggle in Admin's
settings.
2025-01-30 17:05:42 -08:00
renovate[bot]
1d0091506b
Update dependency fastq to v1.19.0 (#22087)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [fastq](https://redirect.github.com/mcollina/fastq) | [`1.18.0` ->
`1.19.0`](https://renovatebot.com/diffs/npm/fastq/1.18.0/1.19.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/fastq/1.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/fastq/1.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/fastq/1.18.0/1.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/fastq/1.18.0/1.19.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>mcollina/fastq (fastq)</summary>

###
[`v1.19.0`](https://redirect.github.com/mcollina/fastq/releases/tag/v1.19.0)

[Compare
Source](https://redirect.github.com/mcollina/fastq/compare/v1.18.0...v1.19.0)

#### What's Changed

- Expose paused status flag by
[@&#8203;greguz](https://redirect.github.com/greguz) in
[https://github.com/mcollina/fastq/pull/91](https://redirect.github.com/mcollina/fastq/pull/91)

#### New Contributors

- [@&#8203;greguz](https://redirect.github.com/greguz) made their first
contribution in
[https://github.com/mcollina/fastq/pull/91](https://redirect.github.com/mcollina/fastq/pull/91)

**Full Changelog**:
https://github.com/mcollina/fastq/compare/v1.18.0...v1.19.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* * * * 1-5" (UTC), Automerge - At
any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 17:55:53 +00:00
renovate[bot]
6e6d6d2230
Update dependency react-router to v7.1.4 (#22086)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [react-router](https://redirect.github.com/remix-run/react-router)
([source](https://redirect.github.com/remix-run/react-router/tree/HEAD/packages/react-router))
| [`7.1.3` ->
`7.1.4`](https://renovatebot.com/diffs/npm/react-router/7.1.3/7.1.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/react-router/7.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router/7.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router/7.1.3/7.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router/7.1.3/7.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>remix-run/react-router (react-router)</summary>

###
[`v7.1.4`](https://redirect.github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#714)

[Compare
Source](https://redirect.github.com/remix-run/react-router/compare/react-router@7.1.3...react-router@7.1.4)

##### Patch Changes

- Internal reorg to clean up some duplicated route module types
([#&#8203;12799](https://redirect.github.com/remix-run/react-router/pull/12799))

- Properly handle status codes that cannot have a body in single fetch
responses (204, etc.)
([#&#8203;12760](https://redirect.github.com/remix-run/react-router/pull/12760))

- Stop erroring on resource routes that return raw strings/objects and
instead serialize them as `text/plain` or `application/json` responses
([#&#8203;12848](https://redirect.github.com/remix-run/react-router/pull/12848))

- This only applies when accessed as a resource route without the
`.data` extension
- When accessed from a Single Fetch `.data` request, they will still be
encoded via `turbo-stream`

- REMOVE: limit matchRoutes optimization to client side
([#&#8203;12882](https://redirect.github.com/remix-run/react-router/pull/12882))

- Optimize Lazy Route Discovery path discovery to favor a single
`querySelectorAll` call at the `body` level instead of many calls at the
sub-tree level
([#&#8203;12731](https://redirect.github.com/remix-run/react-router/pull/12731))

- - Properly bubble headers as `errorHeaders` when throwing a `data()`
result
([#&#8203;12846](https://redirect.github.com/remix-run/react-router/pull/12846))
- Avoid duplication of `Set-Cookie` headers could be duplicated if also
returned from `headers`

- Optimize route matching by skipping redundant `matchRoutes` calls when
possible
([#&#8203;12800](https://redirect.github.com/remix-run/react-router/pull/12800))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* * * * 1-5" (UTC), Automerge - At
any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNDUuMCIsInVwZGF0ZWRJblZlciI6IjM5LjE0NS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-30 17:55:28 +00:00
Sag
4e4651ae07
🔒 Made names for uploaded files more secure and resilient to filesystems' limits (#22055)
ref https://linear.app/ghost/issue/ENG-1260
ref https://linear.app/ghost/issue/ENG-1859

- names for uploaded files now include a 16-character alphanumeric hash,
that gets re-generated on every upload. This prevents original files to
be found, e.g. when redacting sensitive content in an image in the
editor
- if the filename length is higher than what most filesystem accept (255
bytes), we truncate the base of the filename, while keeping space for
the unique hash and the file extension. Example to illustrate
(non-accurate):
    - input: long-name-for-an-image-imagine-255bytes-here-blablablablabla-and-a-bit-more.png
    - output: long-name-for-an-image-1a2b3c4d5e6f7g890.png
2025-01-30 17:42:11 +00:00
renovate[bot]
6d7c711c33 Update actions/upload-artifact action to v4 2025-01-30 17:12:51 +01:00
Daniël van der Winden
9e439ad601
🐛 Fixes dropdowns in Members filters (#22082)
A few of the dropdowns within the Members filter were displaying
incorrectly (wrong background colour, sizing, border radius, and dark
mode styling).

These changes address that. 

Fixes
https://linear.app/ghost/issue/DES-1093/the-filter-for-selecting-an-email-has-a-grey-background-rather-than,
https://linear.app/ghost/issue/DES-1094/the-label-field-is-taller-than-other-fields,
https://linear.app/ghost/issue/DES-1095/the-label-field-changes-border-radius-on-focus,
https://linear.app/ghost/issue/DES-1096/label-and-email-fields-display-incorrectly-in-dark-mode
2025-01-30 16:52:49 +01:00
Kevin Ansfield
523b9d47a0
Added support for gating access to blocks of post content (#22069)
ref https://linear.app/ghost/issue/PLG-327

- updated post output serializer's gating functions to add gating of specific content blocks
  - uses regex to look for specific strings in the HTML for speed compared to fully parsing the HTML
  - content gating blocks look like `<!--kg-gated-block:begin nonMember:true/false memberSegment:"status:free,status:-free"-->...gated content...<!--kg-gated-block:end-->`
  - parsing of params is limited to `nonMember` with a true/false value and `memberSegment` with a string value containing a limited set of supported filters
  - occurs at the API level so that content is correctly gated in Content API output and front-end website
- added `checkGatedBlockAccess()` to members-service content-gating methods to keep the underlying member checks co-located
2025-01-30 12:47:42 +00:00
Djordje Vlaisavljevic
0cdec925ae
Added “unfollow” functionality to FollowButton (#22057)
ref https://linear.app/ghost/issue/AP-590/unable-to-unfollow-accounts

- Users can now unfollow accounts they’re following, which means that account will be removed from the user’s “following” list and any of the future posts or notes published by that account won’t appear in user’s inbox or feed.
- Refactored and simplified `FollowButton` so it only has 2 variants: primary (used on profiles, where it's the primary focus of the screen) and secondary (used in lists where there will probably be lots of `FollowButton`s next to each other.)

---------

Co-authored-by: Fabien O'Carroll <fabien@allou.is>
2025-01-30 12:00:56 +00:00
Ghost CI
99799d214c Merged v5.108.2 into main 2025-01-30 11:12:45 +00:00
Ghost CI
a16f9c6d42 v5.108.2 2025-01-30 11:12:43 +00:00
Sodbileg Gansukh
28275622b9
Added accept parameter to FileUpload component (#21899)
ref DES-182

- adds `accept` parameter to the file uploads making it possible to
define a set of accepted file types
- allows only zip and json files for the universal importer
2025-01-30 11:20:29 +08:00
Audun
048f17757c
🌐 Updated Norwegian translations (#21958)
Updated translation for "Unsubscribe" to something less "google
translated" and to something more natural Norwegian.
2025-01-29 06:58:26 -06:00
renovate[bot]
628550108e
Update dependency recharts to v2.15.1 (#22072)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [recharts](https://redirect.github.com/recharts/recharts) | [`2.15.0`
-> `2.15.1`](https://renovatebot.com/diffs/npm/recharts/2.15.0/2.15.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.15.0/2.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.15.0/2.15.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>recharts/recharts (recharts)</summary>

###
[`v2.15.1`](https://redirect.github.com/recharts/recharts/compare/v2.15.0...3ecaab0e88781e20284f4444d41bf14a00fddf70)

[Compare
Source](https://redirect.github.com/recharts/recharts/compare/v2.15.0...v2.15.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "* * * * 1-5" (UTC), Automerge - At
any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Never, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMjUuMSIsInVwZGF0ZWRJblZlciI6IjM5LjEyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 11:33:06 +00:00
renovate[bot]
e7336585d0 Pin dependencies 2025-01-29 12:19:43 +01:00
Sodbileg Gansukh
15c799e74b
Fixed minor UI bugs in the links table (#22070)
ref DES-1088

- fixed spacing of the edit button
- removed layout shift when entering the edit mode
- fixed the border around the update button
2025-01-29 07:47:09 +00:00
Chris Raible
99037bb521
Revert "Disabled nx daemon in docker container (#22066)" (#22067)
This reverts commit 38d377d434.

- Disabling the daemon led to more problems than it solved with `yarn
dev` running in Docker
2025-01-29 01:50:03 +00:00
Chris Raible
38d377d434
Disabled nx daemon in docker container (#22066)
no issue

- When the nx daemon is enabled and using docker for local development,
we periodically get an error like the following, which crashes `yarn
dev` and requires a manual restart:

```
Daemon process terminated and closed the connection

Please rerun the command, which will restart the daemon.
If you get this error again, check for any errors in the daemon process logs found in: /home/ghost/.nx/workspace-data/d/daemon.log
```

- Disabling the daemon in docker prevents these errors, and so far I
haven't noticed any performance degradation from disabling it.
2025-01-28 15:59:23 -08:00
.hj barraza
b97cea2633
🌐 Updated Spanish translations (#21956)
- Added missing strings and made some shorter for clarity.
2025-01-28 11:21:33 -06:00
Chris Mitchell
59a186189a
🌐 Added missing Scottish Gaelic translations (#21979)
Add missing Scottish Gaelic translations

---------

Co-authored-by: Cathy Sarisky <42299862+cathysarisky@users.noreply.github.com>
2025-01-28 17:19:51 +00:00
Yovko Lambrev
4946c914e5
🌐 Updated Bulgarian translations (#21932)
- Some improvements to the previously translated strings
- Translations of newly introduced strings
2025-01-28 11:17:10 -06:00
R
0404d1934a
🌐 Added and improved Dutch translations (#21959)
Hey there,

I completed some missing translation keys and found a few translation
errors I adjusted. I'm a Dutch native, but feel free to double-check the
edits.

Thanks for building such awesome software for us to enjoy! 
2025-01-28 11:15:02 -06:00
Filip Chabik
dac97218d7 Added webhooks to admin search keywords
no issue

- Webhooks are advanced and powerful feature Ghost offers, but they are quite
  hidden in the settings
- This change adds 'webhooks' keyword to the search in the sidebar to point
  users in the right direction
2025-01-28 08:59:05 +01:00
Sanne de Vries
c21736a444
Updated spam filters icon in settings sidebar (#22062)
ref https://linear.app/ghost/issue/ENG-1973

- used the "block" icon instead of "email-block", to avoid hinting at newsletters landing in spam folders
2025-01-28 14:49:07 +07:00
Sag
f4659a67ac
Released Portal v2.49.0 (#22061)
no issue

- changelog v2.48.3 -> v2.49.0:
    - c0ccdbe280
    - 2f63fa2302
    - c586b1c034
2025-01-28 07:27:07 +00:00
Sag
c586b1c034
Enabled publishers to block additional email domains in member signups (#22047)
ref https://linear.app/ghost/issue/ENG-1973
ref https://app.incident.io/ghost/incidents/132

- following an increase in spam members signups, we have recently added
a blocklist of email domains, based on config (see
https://github.com/TryGhost/Ghost/pull/22027). With this change, we are
extending that feature with a user-facing setting in Ghost Admin
- publishers can now block additional email domains in member signups,
directly from Ghost Admin. These emails domains will be added to the
list of domains already blocked by config
2025-01-28 13:46:37 +07:00
Sodbileg Gansukh
d489299d6b
Fixed double ESC press to close the preview (#22060)
ref DES-549

- togglePreview() function was called twice when the key combination
CMD+P is pressed
- added a guard in the function to prevent it from being called twice
2025-01-28 06:40:30 +00:00
Chris Raible
d4bf982392
Fixed hot reload for admin in docker compose (#22059)
no issue

- Hot reload for admin depends on the browser being able to reach port
4201, which was not exposed in the docker compose setup — this fixes
that so admin will hot reload when running Ghost in docker compose
2025-01-28 06:06:53 +00:00
Chris Raible
1344970128
Added docker:setup yarn script (#22058)
ref
https://linear.app/ghost/issue/ENG-1959/extend-setupjs-to-modify-config-as-appropriate-for-full-docker-dev

- When switching from local development to docker, there are a few
configuration parameters that need to be updated to e.g. point to the
right database host within the docker network.
- Setting these values with environment variables doesn't work well
because the configuration passed via environment overrides the
configuration set in tests, and thus points tests to the wrong database.
- This commit adds a yarn docker:setup command to the root of the repo,
to make it easier to get started with a full docker compose based
workflow. It edits you config.local.json file to update the necessary
settings for running Ghost in docker compose.
- It also updates the clean.js script such that it will run successfully
regardless of whether it is run locally or in docker.
- Finally, this commit also adds convenience commands for developing and
running tests in docker compose
2025-01-27 21:37:40 -08:00
Sam Lord
2f63fa2302
Added Captcha to data attribute forms
ref BAE-370

Enables Captcha (when labs flag and config entry set) in data-attribute
forms within Portal.
2025-01-27 16:52:52 +00:00
Sam Lord
439bbf8b79
Use Captcha middleware in members API
ref BAE-104

The members send-magic-link API should be protected by Captcha. This
required initialising the Captcha service in the members API, and
putting the middleware into the send-magic-link API.

If it's enabled via lab flag and config, then the service will prevent
API calls that don't have a valid Captcha response.
2025-01-27 15:57:31 +00:00
Ghost CI
3e2658baa0 v5.108.1 2025-01-26 17:53:15 +00:00
Ghost CI
d2c868db00 v5.108.0 2025-01-24 15:07:51 +00:00
Daniël van der Winden
9589a91684
🐛 Fixed tags and authors not fitting in the input field (#22052)
Input fields for tags and authors in the post sidebar were hard to use;
they became scrollable if you added more than one line of either.

This fix addresses that; the input field now grows in size to
accommodate for the number of tags or authors you enter.

fixes
https://linear.app/ghost/issue/DES-1087/overflow-on-boxes-in-post-settings-too-small,
https://linear.app/ghost/issue/DES-1084/tag-field-in-post-settings-menu-is-difficult-to-work-now-with-when
2025-01-24 14:11:07 +01:00
Djordje Vlaisavljevic
8c2e62dc23
Improved ActivityPub design (#22051)
ref https://linear.app/ghost/issue/AP-677/standardize-border-radius-used-in-avatars, https://linear.app/ghost/issue/AP-680/standardize-font-sizes-colors-and-weights, https://linear.app/ghost/issue/AP-676/improve-the-sidebar-widget

- Ensured consistent use of border-radius in avatars
- Removed onClick for large avatars, since we only use them when you're already viewing someone's profile
- Updated font colors, weights and sizes for consistency
- Updated design of the sidebar widget in (simpler design, less lines, tighter spacing=
- "Explore" button looks more like what we use in settings and dashboard
2025-01-23 17:35:05 +00:00
Peter Zimon
19d9c3e3e2
Post analytics router update (#22050)
ref https://linear.app/ghost/issue/DES-1082/router-prototype

This task is about testing, figuring out pros and cons of React Router
compared to our current (custom) router, and what effort and risks are
involved in migrating to it.
2025-01-23 16:48:29 +01:00
Sam Lord
c0ccdbe280
Portal: Added HCaptcha element to signup/signin pages
ref BAE-371

Added the HCaptcha react component & related utils to enable it /
disable it based on the Captcha labs flag. At the moment this does not
include the same functionality on forms using the data-attributes.
2025-01-23 12:02:53 +00:00
Peter Zimon
e41fc2c4d5
Shade updates (#22045)
ref
https://linear.app/ghost/issue/DES-1085/update-shade-to-be-used-in-activitypub

- Shade so far was just used in our playground (Post analytics). It
needed to be prepared so that it can be integrated in real projects like
ActivityPub. This means cleaning up everything related to it like
conventions, file structure, documentation etc.
2025-01-23 08:22:04 +01:00
Sag
568322c378
Added new setting in the database: blocked_email_domains [migration] (#22046)
ref https://linear.app/ghost/issue/ENG-1973
ref https://app.incident.io/ghost/incidents/132

- added a new database setting: `blocked_email_domains` (array, default:
`[]`)
- this setting will allow publishers to block additional email domains
during member signups, on top of the ones blocklisted at a config level
(follow-up PR)
2025-01-23 11:12:29 +07:00
Vũ Minh Nguyên
64eef2a851
Added missing Vietnamese translation for portal (#21948)
Translating "This site only accepts paid members."

Co-authored-by: Chris Raible <chris@ghost.org>
2025-01-22 17:21:37 -08:00
Djordje Vlaisavljevic
2d0f6568fa
Fixed reading progress indicator for very short articles (#22036)
ref https://linear.app/ghost/issue/AP-653/scroll-percentage-remains-at-0percent-when-no-content-to-scroll

- When an entire article fits into the viewport height, we used to
show`0%` in the reading progress indicator. Now we check if that's the
case, and then show `100%` if it is.
2025-01-22 17:49:11 +00:00
Sag
5409ae1c68
Released Portal v2.48.3 (#22044)
no issue
- changelog v2.48.2 -> v2.48.3:
    - f07291b72c
2025-01-22 07:35:54 +00:00
Sag
f07291b72c
Added missing error message handler for the integrity token endpoint (#22043)
ref https://linear.app/ghost/issue/PRO-1349

- the integrity token endpoint can return a json response with an error
message (for example, when rate limited)
- added the standard response handler to the integrity token endpoint in
Portal, to render the error message sent by the backend
2025-01-22 14:26:49 +07:00