Commit Graph

32346 Commits

Author SHA1 Message Date
Simon Backx
26635f192f Added visible theme errors in admin
fixes https://github.com/TryGhost/Team/issues/2393
2023-01-06 15:51:34 +01:00
Simon Backx
3ddc85781c Fixed theme warnings not passed when installing theme
refs 6593c3e4a6

In development mode, we didn't pass the warnings when installing a theme. So the warnings were not visible with the fatal errors.
2023-01-06 15:26:54 +01:00
Simon Backx
f6e463ea43 Fixed missing awaits in publishing Playwright test
no issue
2023-01-06 14:18:54 +01:00
Rishabh
54b27f7d55 Fixed offers playwright test for redemption count
- updates check of redemption count using data test attributes to avoid unreliable member count check
2023-01-06 18:39:38 +05:30
Simon Backx
6593c3e4a6 🐛 Fixed warnings not visible when uploading theme with fatal errors
refs https://github.com/TryGhost/Team/issues/2393

Small bug if you upload a theme that has fatal errors, in development mode the warnings are not visible.
2023-01-06 13:54:09 +01:00
Simon Backx
7b3712a15b
Added visible theme errors in admin (#16081)
refs https://github.com/TryGhost/Team/issues/2393

- During boot and loading the active theme, we now cache the result of
the gscan validation. Cache configuration can happen in
`adapters.cache.gscan`
- We now also return non-fatal errors when activating or adding a theme.
- When the `themeErrorsNotification` feature flag is on, we fetch the
active theme (which includes the validation information) when loading
admin
- If the currently active theme has errors, we show an error
notification that can open the error modal
- Added a new endpoint: `/ghost/api/admin/themes/active/` that returns
the result of the last gscan validation of the active theme. If no cache
is available, it will run a new gscan validation.
- Added new permissions for the active action/endpoint (author, editor,
administrator)
2023-01-06 13:44:27 +01:00
Naz
a37bd19f74
ℹ️ Bumped gscan to 4.36.0
closes https://github.com/TryGhost/Toolbox/issues/497

- The classification of fatal/non-fatal errors has been updated to only be fatal when causing page renders with 5xx or 4xx responses.
- Some of the rules checking Ghost 5.x compatibility have been relaxed to only be "error" with the gscan version bump
- You can find more details on which exact rules were relaxed in the gscan's commit log - https://github.com/TryGhost/gscan/compare/v4.35.1...v4.36.0
2023-01-06 18:05:07 +07:00
Naz
3e209218d7
Made resource mismatch error more specific
refs https://github.com/TryGhost/Toolbox/issues/497

- During gscan fatal error downgrade to non-fatal some of the deprecated helpers were a bit vague to debug with no information on which exact "resource" was invalid
- Added resource name to the log for clarity. Should make life easier when debugging potential get helper misuses
2023-01-06 18:05:07 +07:00
Naz
8911af150a
Removed "code" property from global error variable
refs https://github.com/TryGhost/Toolbox/issues/406
refs b2a3e03ef3

- The "code" property in the global "error" variable (accessible via {{error.*}}) has been long deprecated - time to go, bye!
- When {{code}} or {{error.code}} helpers are used in the templates they will output an empty string from now on. Use {{statusCode}} instead!
2023-01-06 18:05:07 +07:00
renovate[bot]
f58a7725d6 Update dependency luxon to v2.5.2 2023-01-06 11:59:24 +01:00
renovate[bot]
1c64b8a8fc Update dependency html-validate to v7.12.1 2023-01-06 11:58:57 +01:00
Sam Lord
36e7e79eec Improved Playwright test, selector for redemption count
no issue

Selector for redemption count was not ideal - this makes it more specific & clear.
2023-01-06 10:56:19 +00:00
Rishabh
30c9dfd68d Fixed failing playwright test to remove member labels
- the test was using incorrect test state that was copied over from adding label test
- also adds guard for empty newsletters in member filters as in some cases it might not exist as found by test
2023-01-06 16:17:34 +05:30
Ronald Langeveld
e52f29231f Added Playwright test - remove labels from members
ref https://github.com/TryGhost/Team/issues/2371

- check that a fitered list of members can have a label removed from
  them at once.
2023-01-06 14:36:13 +08:00
Patrick McKenzie
559ca9d866
🐛 Stopped creating redundant Stripe Customers for Members
fixes https://github.com/TryGhost/Ghost/issues/16057

Briefly, Ghost created two Customer objects via the Stripe API when an
existing subscriber would upgrade to a paid subscription, one in an API
call to create the Customer and then a second as a side effect of an API
call to create a Checkout session for the user. The fix is passing the
reference to the Customer object to the API call to create the Checkout
session; Stripe will no longer redundantly create a Customer object in
this case.

This largely impacts the owner's experience of the Stripe Dashboard; it
will correct their new Customer count (going forward) and make searches
for users by name or email address return one responsive object which
has the actual subscription in it versus returning two and forcing them
to look in each to e.g. refund a transaction or similar.
2023-01-06 11:44:56 +07:00
renovate[bot]
78384dd9eb
Update dependency ember-template-lint to v5.3.1 2023-01-06 00:21:56 +00:00
Ghost CI
adbf6427ae v5.27.0 2023-01-05 16:22:40 +00:00
Simon Backx
d34f07f408 🐛 Fixed admin loading member counts for authors and editors
no issue

When using admin as a user with author or editor permissions, admin tried to load the member counts in order to display them in the menu. But authors and editors are not allowed to see the members. So the request returned a 403.

It is not necessary to load the member counts for authors and editors, so we can just skip the request.
2023-01-05 16:37:01 +01:00
Simon Backx
cf5c64f96b
🐛 Fixed batches can have an empty "to" field (#16064)
fixes https://github.com/TryGhost/Team/issues/2246

This solution adds some retries when fetching the recipients for a
batch. For an unknown reason the recipients can be empty (while they
aren't in the database). This should fix the issue for now until we find
more information about the root cause.
2023-01-05 15:29:03 +01:00
Peter Zimon
bfe1915924 Theme error list design refinements
refs. https://github.com/TryGhost/Team/issues/2393

- style for theme error list was outdated
2023-01-05 13:19:34 +01:00
Djordje Vlaisavljevic
5b8a44772b Fixed settings menu header and tags overlapping
no refs
2023-01-05 12:08:03 +00:00
Peter Zimon
84cdf0c46c Added static version of theme errors notification
refs. https://github.com/TryGhost/Team/issues/2393

- a labs flag had to be created so we avoid working in branches
- permanent notification toast was added to make theme errors more discoverable
- static modal was needed to hold theme error details
2023-01-05 11:38:17 +01:00
Fabien "egg" O'Carroll
953f3856a8 Handled EmailBounceEvent with 605 error code
When Mailgun fails to deliver an email to an address because the
address has already bounced before, it gives us a permanent fail event
with a 605 error code rather than a 5xx one. Because we want to
"backfill" our suppressions data with previously bounced email
addresses, we want to handle this specific error code.

We may update this logic in the future based on new information from
Mailgun with respect to their 6xx error codes and the
meanings/underlying cause of theme.

This also moves the tests which check for whether or not emails are
suppressed into their own fail so that we do not pollute the event
storage tests, and adds more tests cases.

We also fix a leaky sinon stub which we were not resetting in the email
event storage tests
2023-01-05 17:11:37 +07:00
Fabien "egg" O'Carroll
2d9114450c Fixed email_recipients fixtures for tests
The email_recipient fixtures were using duplicate and mismatched email addresses
rather than having them correctly map to the Members, which is required for testing
email suppressions.
2023-01-05 17:11:06 +07:00
Peter Zimon
74fd5d4b04 Portal settings design bugfixes
no refs.

- Stripe Connect footer in the Portal settings sidebar was covering settings on small screens
- the border for Stripe Connect box was not visible in dark mode
- the "Save and Close" button background was not visible in dark mode in Portal settings
2023-01-04 18:04:01 +01:00
renovate[bot]
218136060e Update sentry-javascript monorepo to v7.29.0 2023-01-04 17:23:05 +01:00
renovate[bot]
e291c18371
Update dependency ember-modifier to v4 (#15990)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [ember-modifier](https://togithub.com/ember-modifier/ember-modifier) |
[`3.2.7` ->
`4.0.0`](https://renovatebot.com/diffs/npm/ember-modifier/3.2.7/4.0.0) |
[![age](https://badges.renovateapi.com/packages/npm/ember-modifier/4.0.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/ember-modifier/4.0.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/ember-modifier/4.0.0/compatibility-slim/3.2.7)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/ember-modifier/4.0.0/confidence-slim/3.2.7)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>ember-modifier/ember-modifier</summary>

###
[`v4.0.0`](https://togithub.com/ember-modifier/ember-modifier/blob/HEAD/CHANGELOG.md#v400-2022-12-13)

[Compare
Source](https://togithub.com/ember-modifier/ember-modifier/compare/v3.2.7...v4.0.0)

##### 🚀 Enhancement

-
[#&#8203;498](https://togithub.com/ember-modifier/ember-modifier/pull/498)
Update signature of constructor for class-based modifiers
([@&#8203;SergeAstapov](https://togithub.com/SergeAstapov))
-
[#&#8203;327](https://togithub.com/ember-modifier/ember-modifier/pull/327)
auto-publish unstable packages to NPM
([@&#8203;SergeAstapov](https://togithub.com/SergeAstapov))

##### 🐛 Bug Fix

-
[#&#8203;372](https://togithub.com/ember-modifier/ember-modifier/pull/372)
Include `blueprints` folder in published tarball
([@&#8203;SergeAstapov](https://togithub.com/SergeAstapov))

##### 📝 Documentation

-
[#&#8203;504](https://togithub.com/ember-modifier/ember-modifier/pull/504)
docs: Fix typo in TypeScript class based example
([@&#8203;HeroicEric](https://togithub.com/HeroicEric))

##### 🏠 Internal

-
[#&#8203;539](https://togithub.com/ember-modifier/ember-modifier/pull/539)
Sync with latest v2 addon and cli-typescript blueprints
([@&#8203;SergeAstapov](https://togithub.com/SergeAstapov))
-
[#&#8203;328](https://togithub.com/ember-modifier/ember-modifier/pull/328)
run `npx ember-cli-update --to=4.3.0` to align with blueprint
([@&#8203;SergeAstapov](https://togithub.com/SergeAstapov))

##### Committers: 2

-   Eric Kelly ([@&#8203;HeroicEric](https://togithub.com/HeroicEric))
- Sergey Astapov
([@&#8203;SergeAstapov](https://togithub.com/SergeAstapov))

</details>

---

### Configuration

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

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, 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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC41NC4yIiwidXBkYXRlZEluVmVyIjoiMzQuNTQuMiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-04 15:13:15 +00:00
Simon Backx
30853bc213 Added 100% test coverage to EmailEventProcessor
refs https://github.com/TryGhost/Team/issues/2339
2023-01-04 16:07:19 +01:00
Peter Zimon
9d924efe92 Updated Stripe Connect buttons
no refs.

- Stripe Connect in Portal was not discoverable enough
- we used the old Stripe Connect buttons everywhere
2023-01-04 15:29:56 +01:00
Simon Backx
c31bc58210 Added 100% test coverage to EmailController
refs https://github.com/TryGhost/Team/issues/2339
2023-01-04 15:22:49 +01:00
Simon Backx
913ad18b71
Added DomainEvents.allSettled utility method (#16075)
no issue

With the increased usage of DomainEvents, it gets harder to build
reliable tests without having to resort to timeouts. This utility method
allows us to wait for all events to be processed before continuing with
the test.

This change should speed up tests and make them more reliable.

It only adds extra code when running tests and shouldn't impact
production.
2023-01-04 14:30:35 +01:00
Simon Backx
e2e9a56583 Added 100% test coverage to EmailService class
refs https://github.com/TryGhost/Team/issues/2339

Tests the EmailService class of the email-service package.
2023-01-04 14:25:29 +01:00
Rishabh
45ab2586b0 Fixed free trial messaging shown for invite-only sites in portal
refs https://github.com/TryGhost/Team/issues/2361

- bumps portal with fix for free trial messaging shown on invite-only sites
2023-01-04 17:15:25 +05:30
Rishabh
09237b2c90 Released Portal v2.23.0 2023-01-04 17:13:24 +05:30
Rishabh
f5aa07a095 🐛 Removed free trial message shown on portal for invite only sites
closes https://github.com/TryGhost/Team/issues/2361

If a free trial tier existed on site and its set to 'Invite only' in membership settings, the free trial copy still showed on portal.

- removes free trial copy from portal if site is invite only
- adds playwright test to make sure free trial copy is not shown for invite only sites
2023-01-04 17:11:55 +05:30
Daniel Lockyer
017f3e1257 Lowered threshold for link-tracking coverage
- for some reason, Node 18 detects a lower coverage than the configured
  threshold so this fails
- I've temporarily lowered the threshold until we can investigate why
2023-01-04 11:27:39 +01:00
Daniel Lockyer
1af31bab1a ℹ️ Added support for Node 18
refs https://github.com/TryGhost/Toolbox/issues/488

- Node 18 is now LTS so we're adding support for it
- this adds Node 18.12.1 (the latest security release) to our supported
  ranges and CI
2023-01-04 11:27:39 +01:00
Daniel Lockyer
aa08fc72e7 Updated Koenig packages
refs https://github.com/TryGhost/Toolbox/issues/488

- these packages add support for Node 18 and drop support for Node 12
2023-01-04 11:27:39 +01:00
Fabien 'egg' O'Carroll
50e99e013c
Added migrations to drop and recreate the suppressions table (#16070)
There are currently two issues with the suppressions table:
  - We have some incorrect rows
  - We have missing UNIQUE constraints

We want to completely wipe the tables and start fresh, as well as make
sure that the UNIQUE constraints are added, so we drop the table
completely, and then re-add it, which should result in an empty
suppressions table with all expected constraints.

We've also renamed the `email_address` column to `email` to match our
`users` & `members` tables
2023-01-04 17:26:57 +07:00
Simon Backx
819d0d884c
Improved email verification required checks (#16060)
fixes https://github.com/TryGhost/Team/issues/2366
refs https://ghost.slack.com/archives/C02G9E68C/p1670232405014209

Probem described in issue.

In the old MEGA flow:
- The `email_verification_required` check is now repeated inside the job

In the new email service flow:
- The `email_verification_required` is now checked (didn't happen
before)
- When generating the email batch recipients, we only include members
that were created before the email was created. That way it is
impossible to avoid limit checks by inserting new members between
creating an email and sending an email.
- We don't need to repeat the check inside the job because of the above
changes

Improved handling of large imports:
- When checking `email_verification_required`, we now also check if the
import threshold is reached (a new method is introduced in
vertificationTrigger specifically for this usage). If it is, we start
the verification progress. This is required for long running imports
that only check the verification threshold at the very end.
- This change increases the concurrency of fastq to 3 (refs
https://ghost.slack.com/archives/C02G9E68C/p1670232405014209). So when
running a long import, it is now possible to send emails without having
to wait for the import. Above change makes sure it is not possible to
get around the verification limits.

Refactoring:
- Removed the need to use `updateVerificationTrigger` by making
thresholds getters instead of fixed variables.
- Improved awaiting of members import job in regression test
2023-01-04 11:22:12 +01:00
renovate[bot]
c9221525bc Update dependency gscan to v4.35.1 2023-01-04 11:13:01 +01:00
Fabien 'egg' O'Carroll
e78612bb66
Fixed MailgunEmailSuppressionList adding non-5xx failures to the list
The MailgunEmailSuppression list was incorrectly adding emails
to the suppression list for permanent failure events which have
an error code outside of the 5xx range.
2023-01-04 17:03:52 +07:00
Kevin Ansfield
ea9c8c03fe
Update dependency ember-template-lint to v5.3.0 (#16062)
refs https://github.com/TryGhost/Ghost/pull/15550

Pulled out of the rolled up node+ember-js+ember-template rollup linter update PR as it required fairly extensive changes.

- bumped package
- renamed `no-down-event-binding` to `no-pointer-down-event-binding`
- disabled `no-pointer-down-event-binding` rule
- disabled `no-triple-curlies` rule
- ran `yarn lint:hbs --fix`
- updated integration tests to match Octane syntax
- fixed various one-off errors
- updated .lint-todo
2023-01-04 09:39:32 +00:00
Simon Backx
789e2c96c0
🐛 Fixed SingleUseTokens being cleared on boot (#15999)
fixes https://github.com/TryGhost/Team/issues/1996

**Issue**
Our Magic links are valid for 24 hours. After first usage, the token
lives for a further 10 minutes, so that in the case of email servers or
clients that "visit" links, the token can still be used.

The implementation of the 10 minute window uses setTimeout, meaning if
the process is interrupted, the 10 minute window is ignored completely,
and the token will continue to live for the remainder of it's 24 hour
validity period. To prevent that, the tokens are cleared on boot at the
moment.

**Solution**

To remove the boot clearing logic, we need to make sure the tokens are
only valid for 10 minutes after first use even during restarts.

This commit adds 3 new fields to the SingleUseToken model:
- updated_at: for storing the last time the token was changed/used). Not
really used atm.
- first_used_at: for storing the first time the token was used
- used_count: for storing the number of times the token has been used

Using these fields:
- A token can only be used 3 times
- A token is only valid for 10 minutes after first use, even if the
server restarts in between
- A token is only valid for 24 hours after creation (not changed)

We now also delete expired tokens in a separate job instead of on boot /
in a timeout.
2023-01-04 09:49:39 +01:00
renovate[bot]
497491fbef
Update metascraper to v5.33.3 2023-01-04 01:46:54 +00:00
renovate[bot]
640b4accd6
Update dependency knex-migrator to v5.1.0 2023-01-03 22:35:38 +00:00
Paul Davis
8db947cd24
Trim generated post slug length in Revue importer (#16065)
refs: 5f90baf6fe

- Ghost has a character limit on post slugs of 191 characters,
- Sometimes, the slug that is generated from the title in Revue content is longer than this, causing the import to fail. 
- This PR trims that generated post slug to 190 characters.
2023-01-03 20:15:32 +00:00
renovate[bot]
1c9ad00d6d
Update dependency bookshelf-relations to v2.5.1 2023-01-03 19:09:30 +00:00
renovate[bot]
854c90f324 Update dependency fastq to v1.15.0 2023-01-03 19:06:34 +00:00
renovate[bot]
f6db0640a6
Update dependency @ember/test-helpers to v2.9.3 (#16011)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@ember/test-helpers](https://togithub.com/emberjs/ember-test-helpers)
| [`2.8.1` ->
`2.9.3`](https://renovatebot.com/diffs/npm/@ember%2ftest-helpers/2.8.1/2.9.3)
|
[![age](https://badges.renovateapi.com/packages/npm/@ember%2ftest-helpers/2.9.3/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/@ember%2ftest-helpers/2.9.3/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/@ember%2ftest-helpers/2.9.3/compatibility-slim/2.8.1)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/@ember%2ftest-helpers/2.9.3/confidence-slim/2.8.1)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>emberjs/ember-test-helpers</summary>

###
[`v2.9.3`](https://togithub.com/emberjs/ember-test-helpers/releases/tag/v2.9.3):
Release 2.9.3

[Compare
Source](https://togithub.com/emberjs/ember-test-helpers/compare/v2.9.2...v2.9.3)

##### 🐛 Bug Fix

-
[#&#8203;1305](https://togithub.com/emberjs/ember-test-helpers/pull/1305)
\[backport] Avoid unnecessary dependencies on `@glimmer` types
([@&#8203;dfreeman](https://togithub.com/dfreeman))

##### Committers: 1

-   Dan Freeman ([@&#8203;dfreeman](https://togithub.com/dfreeman))

###
[`v2.9.2`](https://togithub.com/emberjs/ember-test-helpers/releases/tag/v2.9.2):
Release 2.9.2

[Compare
Source](https://togithub.com/emberjs/ember-test-helpers/compare/v2.9.1...v2.9.2)

##### 🐛 Bug Fix

-
[#&#8203;1302](https://togithub.com/emberjs/ember-test-helpers/pull/1302)
\[backport] Remove the index signature from `TestContext`
([@&#8203;chriskrycho](https://togithub.com/chriskrycho))
- Backporting
[#&#8203;1301](https://togithub.com/emberjs/ember-test-helpers/pull/1301)
Remove the index signature from `TestContext`
([@&#8203;dfreeman](https://togithub.com/dfreeman))
-
[#&#8203;1303](https://togithub.com/emberjs/ember-test-helpers/pull/1303)
`TestContext.resumeTest()` returns `void`, not `Promise<void>`
([@&#8203;chriskrycho](https://togithub.com/chriskrycho))

##### Committers: 1

- Chris Krycho ([@&#8203;chriskrycho](https://togithub.com/chriskrycho))
-   Dan Freeman ([@&#8203;dfreeman](https://togithub.com/dfreeman))

###
[`v2.9.1`](https://togithub.com/emberjs/ember-test-helpers/blob/HEAD/CHANGELOG.md#v291-2022-12-16)

[Compare
Source](https://togithub.com/emberjs/ember-test-helpers/compare/v2.9.0...v2.9.1)

***Note:** these were all back-ported from master since they could go
out on 2.9. This will be the last 2.9 release unless there are critical
bug fixes here!*

##### 🐛 Bug Fix

- Let ESLint have its way about docstring location
([`a8fac83`](https://togithub.com/emberjs/ember-test-helpers/commit/a8fac83))
- DOC: API: add render helper examples
([`f476a20`](https://togithub.com/emberjs/ember-test-helpers/commit/f476a20))
- Tweak TS style for indexing multiple types (for getElement)
([`f01ad9f`](https://togithub.com/emberjs/ember-test-helpers/commit/f01ad9f))
- Use export type for RenderingTestContext
([`2dc5077`](https://togithub.com/emberjs/ember-test-helpers/commit/2dc5077))
- Tweak TS style for indexing multiple types
([`3214483`](https://togithub.com/emberjs/ember-test-helpers/commit/3214483))
- Address PR feedback
([`5e87a54`](https://togithub.com/emberjs/ember-test-helpers/commit/5e87a54))
- DOC: API: add DOM query helper examples
([`83b7f5f`](https://togithub.com/emberjs/ember-test-helpers/commit/83b7f5f))
- Export type for Target
([`335019d`](https://togithub.com/emberjs/ember-test-helpers/commit/335019d))
- Upgrade expect-type and fix issues the new version reveals
([`bae5e33`](https://togithub.com/emberjs/ember-test-helpers/commit/bae5e33))
- Correctly handle special char keyCodes with Shift
([`d537923`](https://togithub.com/emberjs/ember-test-helpers/commit/d537923))
- Add tab type test
([`64f40d5`](https://togithub.com/emberjs/ember-test-helpers/commit/64f40d5))
- Generate documentation
([`939f29f`](https://togithub.com/emberjs/ember-test-helpers/commit/939f29f))
- Ensure types reflect optional-ness of tab options
([`95285cc`](https://togithub.com/emberjs/ember-test-helpers/commit/95285cc))
- Fix typesVersions config again
([`53fa899`](https://togithub.com/emberjs/ember-test-helpers/commit/53fa899))
- Clean up public-types after pack
([`b9dcbca`](https://togithub.com/emberjs/ember-test-helpers/commit/b9dcbca))

###
[`v2.9.0`](https://togithub.com/emberjs/ember-test-helpers/blob/HEAD/CHANGELOG.md#v290-2022-12-14)

[Compare
Source](https://togithub.com/emberjs/ember-test-helpers/compare/v2.8.1...v2.9.0)

##### 🚀 Enhancement

-
[#&#8203;1269](https://togithub.com/emberjs/ember-test-helpers/pull/1269)
Re-export hasEmberVersion (and its type) from
[@&#8203;ember/test-helpers](https://togithub.com/ember/test-helpers)
([@&#8203;gitKrystan](https://togithub.com/gitKrystan))
-
[#&#8203;1278](https://togithub.com/emberjs/ember-test-helpers/pull/1278)
perf: Remove excessive destroy call
([@&#8203;runspired](https://togithub.com/runspired))
-
[#&#8203;1234](https://togithub.com/emberjs/ember-test-helpers/pull/1234)
Introduce public TypeScript support
([@&#8203;chriskrycho](https://togithub.com/chriskrycho))

##### 🐛 Bug Fix

-
[#&#8203;1277](https://togithub.com/emberjs/ember-test-helpers/pull/1277)
Actually publish .d.ts
([@&#8203;gitKrystan](https://togithub.com/gitKrystan))
-
[#&#8203;1270](https://togithub.com/emberjs/ember-test-helpers/pull/1270)
Fix typesVersions path
([@&#8203;gitKrystan](https://togithub.com/gitKrystan))
-
[#&#8203;1233](https://togithub.com/emberjs/ember-test-helpers/pull/1233)
Add more keyCode mappings ([@&#8203;CvX](https://togithub.com/CvX))

##### 📝 Documentation

-
[#&#8203;1259](https://togithub.com/emberjs/ember-test-helpers/pull/1259)
DOCS: API: publish docs for tab
([@&#8203;geneukum](https://togithub.com/geneukum))

##### Committers: 5

- Chris Krycho ([@&#8203;chriskrycho](https://togithub.com/chriskrycho))
-   Chris Thoburn ([@&#8203;runspired](https://togithub.com/runspired))
-   Geordan Neukum ([@&#8203;geneukum](https://togithub.com/geneukum))
-   Jarek Radosz ([@&#8203;CvX](https://togithub.com/CvX))
- Krystan HuffMenne
([@&#8203;gitKrystan](https://togithub.com/gitKrystan))

</details>

---

### Configuration

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

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, 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 has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/TryGhost/Ghost).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC41NC4yIiwidXBkYXRlZEluVmVyIjoiMzQuNjYuMSJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-01-03 18:04:35 +00:00