1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-04 00:18:01 +01:00
Commit Graph

1610 Commits

Author SHA1 Message Date
Jaanus Sellin
5d762dcb39
feat: sort favorites on the backend (#5326)
Now favorites will be always on first page, if pinned.
2023-11-14 09:22:35 +02:00
Mateusz Kwasniewski
ce7644e0af
chore: log unerlying DB error in set user root role (#5324) 2023-11-13 12:16:01 +01:00
Jaanus Sellin
5782efa6c0
chore: move sort order validation closer to store due to possible SQL injection (#5322) 2023-11-13 12:43:12 +02:00
Jaanus Sellin
00327c359d
chore: optimize sql query to not concatenate (#5321) 2023-11-13 08:42:19 +02:00
Fredrik Strand Oseberg
7f4df19660
Feat/pagination bar (#5309)
Initial implementation of the sticky pagination bar.
2023-11-10 14:16:31 +01:00
Nuno Góis
15f77f5b8b
fix: project settings flag limit not properly set (#5317)
https://linear.app/unleash/issue/SR-169/ticket-1107-project-feature-flag-limit-is-not-correctly-updated

Fixes #5315, an issue where it would not be possible to set an empty
flag limit.
This also fixes the UI behavior: Before, when the flag limit field was
emptied, it would disappear from the UI.

I'm a bit unsure of the original intent of the `(data.defaultStickiness
!== undefined || data.featureLimit !== undefined)` condition. We're in
an update method, triggered by a PUT endpoint - I think it's safe to
assume that we'll always want to set these values to whatever they come
as, we just need to convert them to `null` in case they are not present
(i.e. `undefined`).
2023-11-10 09:57:20 +00:00
andreas-unleash
180c0dceae
Fix/scheduled request UI (#5318)
Change timezone format
Fixes a bug where the Edit button on hover being elongated

Before:
<img width="755" alt="Screenshot 2023-11-09 at 21 36 01"
src="https://github.com/Unleash/unleash/assets/104830839/189f21d5-8a68-4d6b-b094-b518749a9b2f">

After:
<img width="812" alt="Screenshot 2023-11-09 at 22 09 26"
src="https://github.com/Unleash/unleash/assets/104830839/9056f995-bd2b-4353-8526-77160e49e990">

Adds the missed onClick to the edit button to show the dialog

Fixes a bug with ScheduleChangesDialog onClose

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-11-10 11:22:03 +02:00
Nuno Góis
de638b5b8e
fix: segment project fetch when global (#5311)
This fixes an edge case not caught originally in
https://github.com/Unleash/unleash/pull/5304 - When creating a new
segment on the global level:
 - There is no `projectId`, either in the params or body
- The `UPDATE_PROJECT_SEGMENT` is still a part of the permissions
checked on the endpoint
 - There is no `id` on the params

This made it so that we would run `segmentStore.get(id)` with an
undefined `id`, causing issues.

The fix was simply checking for the presence of `params.id` before
proceeding.
2023-11-09 13:27:12 +00:00
Thomas Heartman
ece5a634bf
feat: API prevents you from deleting segments in crs (#5308)
This PR hooks up the changes introduced in #5301 to the API and puts
them behind a feature flag. A new test has been added and the test setup
has been slightly tweaked to allow this test.

When the flag is enabled, the API will now not let you delete a segment
that's used in any active CRs.
2023-11-09 12:09:39 +01:00
Nuno Góis
4d1f76e61b
fix: take into account project segments permission (#5304)
https://linear.app/unleash/issue/SR-164/ticket-1106-user-with-createedit-project-segment-is-not-able-to-edit-a

Fixes a bug where the `UPDATE_PROJECT_SEGMENT` permission is not
respected, both on the UI and on the API. The original intention was
stated
[here](https://github.com/Unleash/unleash/pull/3346#discussion_r1140434517).

This was easy to fix on the UI, since we were simply missing the extra
permission on the button permission checks.

Unfortunately the API can be tricky. Our auth middleware tries to grab
the `project` information from either the params or body object, but our
`DELETE` method does not contain this information. There is no body and
the endpoint looks like `/admin/segments/:id`, only including the
segment id.

This means that, in the rbac middleware when we check the permissions,
we need to figure out if we're in such a scenario and fetch the project
information from the DB, which feels a bit hacky, but it's something
we're seemingly already doing for features, so at least it's somewhat
consistent.

Ideally what we could do is leave this API alone and create a separate
one for project segments, with endpoints where we would have project as
a param, like so:
`http://localhost:4242/api/admin/projects/:projectId/segments/1`.

This PR opts to go with the quick and hacky solution for now since this
is an issue we want to fix quickly, but this is something that we should
be aware of. I'm also unsure if we want to create a new API for project
segments. If we decide that we want a different solution I don't mind
either adapting this PR or creating a follow up.
2023-11-09 09:37:47 +00:00
Jaanus Sellin
8c2a052a68
fix: project overview and search returning just single tag (#5305) 2023-11-09 10:58:34 +02:00
Thomas Heartman
2695e38ed5
fix: make test for last seen by env not rely on array order (#5303)
This test was flaky because it relied on the order of the array
returned. To make it less flaky, we now turn the array into an object
instead and compare that.
2023-11-08 15:23:24 +01:00
Thomas Heartman
ebf3102244
chore: add detect segment usage in CRs flag (#5302)
As the title says, this PR adds a flag to unleash for detecting segment
usage in CRs.
2023-11-08 15:06:01 +01:00
Jaanus Sellin
a5288ae0b1
feat: also allow searching partial tags (#5299) 2023-11-08 16:05:22 +02:00
Thomas Heartman
f45454fbfd
refactor: extract segment usage read model (#5301)
This PR adds a way to tell if a specific segment is being used in any
active change requests. It's the first step towards preventing segments
that are being used in change requests from being deleted.

It does that by checking the db for any unclosed CRs and using those CR
ids to look for "addStrategy" and "updateStrategy" events in the cr
events table.

## Upcoming PRs

This only puts in a way to detect it, but doesn't add that to anything.
That'll be in an upcoming iteration.
2023-11-08 14:50:12 +01:00
Jaanus Sellin
24f9fa3058
feat: connect search and filter with server api (#5297) 2023-11-08 14:19:40 +02:00
Fredrik Strand Oseberg
fa85e10eac
refactor: remove separate admin api feature flag (#5228)
This PR will remove the feature flag to separate the admin and client
api
2023-11-08 12:24:11 +01:00
Jaanus Sellin
4bacd3e055
feat: introduce offset based search instead of cursor (#5274) 2023-11-08 11:12:42 +02:00
Gastón Fournier
1dc7dd646d
chore: expose custom-handler-auth type (#5287)
This will help us get type checking on the auth handler function
2023-11-07 10:37:09 +01:00
Thomas Heartman
b3054c9277
Chore: remove "dataPath" from data OpenAPI data errors. (#5272)
The `dataPath` was present (but not in the type) in previous versions of
the
error library that we use. But with the recent major upgrade, it's
been removed and the `instancePath` property has finally come into use.

This PR removes all the handling for the previous property and
replaces it with `instancePath`. Because the `dataPath` used full
stops and the `instancePath` uses slashes, we need to change a little
bit of the handling too.
2023-11-07 09:26:14 +01:00
Nuno Góis
1539cb7553
fix: correctly query roles to be removed (#5275)
Fixes / refactors the way roles are being fetched in
`removeRolesOfTypeForUser` to be more consistent with the rest of our
code base.
2023-11-06 13:38:12 +00:00
Gastón Fournier
f16ad4e899
chore: import IUser instead of User for auth (#5269)
## About the changes
A very subtle change in the way we import IUser makes a huge difference
because previously, instead of importing IUser interface we were
importing User and naming it IUser here:

6f8f21fd48/src/lib/routes/unleash-types.ts (L2)
whereas the correct way of importing the interface is:

eec64b119e/src/lib/routes/unleash-types.ts (L2)
2023-11-06 10:46:59 +01:00
Thomas Heartman
78cf9d03aa
refactor: switch to upstream express-openapi (#5259)
Switch the express-openapi implementation from our internal fork to the
upstream version. We have upstreamed our changes and a new version has
been released, so this should be the last step before we can retire our
fork.

Because some of the dependencies have been updated since our internal
fork, we also need to update some of our error handling to reflect this.
2023-11-06 08:22:02 +01:00
Gastón Fournier
6f8f21fd48
chore: expose type and more fixes (#5268)
Expose new interface while also getting rid of unneeded compiler ignores

None of the changes should add new security risks, despite this report:
> Code scanning results / CodeQL Failing after 4s — 2 new alerts
including 2 high severity security vulnerabilities

Not sure what that means, maybe a removed ignore...
2023-11-03 17:36:50 +01:00
Fredrik Strand Oseberg
1d9a67189a
fix: last seen deadlocks (#5264)
Sort the items before inserting them into the database in order to
reduce the chance of deadlocks happening when multiple pods are
inserting at the same time.
2023-11-03 14:06:13 +01:00
Mateusz Kwasniewski
43298e16e2
feat: Server side sort by (#5250) 2023-11-03 13:15:12 +01:00
Gastón Fournier
9688955d4b
chore: expose types so we can use them properly (#5251)
Expose types to be used in enterprise and cloud addons
2023-11-03 12:00:24 +01:00
Nuno Góis
a2b0507459
feat: add banners OpenAPI tag (#5257)
https://linear.app/unleash/issue/2-1515/create-new-api-tag-banners-for-ga

Adds a new OpenAPI tag "Banners" in preparation for GA.
2023-11-03 09:05:19 +00:00
andreas-unleash
95245c4413
chore: remove enum type from db (#5254)
Changes the change_request_schedule `status` column to text. 
Drops the custom type

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-11-03 09:28:19 +02:00
Mateusz Kwasniewski
cbc89f6a92
feat: sort parent options alphabetically (#5238) 2023-11-01 21:18:19 +01:00
Mateusz Kwasniewski
bc66fb649f
feat: infinite scroll API trigger (#5242) 2023-11-01 15:56:06 +01:00
Mateusz Kwasniewski
d074254b61
feat: connect project overview table to search api (#5237) 2023-11-01 12:05:42 +01:00
Jaanus Sellin
598d022a5a
fix: do not allow segment deletion when used in private projects (#5236) 2023-11-01 11:01:23 +02:00
Mateusz Kwasniewski
74bbc7799e
feat: total count in search results (#5235) 2023-11-01 09:19:42 +01:00
Mateusz Kwasniewski
e5bbe5829f
feat: Cursor based hateoas (#5230) 2023-10-31 14:10:31 +01:00
Gastón Fournier
b1ea2c3b88
chore: expose instanceId so it can be used from addons (#5231)
## About the changes
A bit of boy scouting trying to expose the instanceId
2023-10-31 12:38:21 +01:00
Jaanus Sellin
406b2383da
fix: private projects early exit when not root viewer (#5232) 2023-10-31 13:37:09 +02:00
Simon Hornby
9f8f94b06b
chore: remove access overview toggle (#5166) 2023-10-30 14:57:20 +02:00
Fredrik Strand Oseberg
7d65615335
refactor: remove deep diff (#5217)
For a while we ran a diffing algorithm in production to verify that the
results of the refactor did not differ from the previous results. As the
experiment has run it's course and new attributes have been added on top
of the new flow, this will remove the logging and associated code.
2023-10-30 13:30:21 +01:00
Ivar Conradi Østhus
50ddb365b9
fix: make sure we are still pg10 compatible. (#5214)
`EXECUTE FUNCTION` was introduced in Postgres v11. In Postgres v10 the
syntax was `EXECUTE PROCEDURE`. This fix changes the syntax to `EXECUTE
PROCEDURE`, which is perfectly fine sense our function does not return
anything.
2023-10-30 13:19:57 +01:00
Fredrik Strand Oseberg
28c72ec957
fix: ft overview last seen at (#5212)
Fixes an issue where the query in the feature toggle overview would
return excess rows
2023-10-30 13:09:27 +01:00
Mateusz Kwasniewski
b54d481fc8
fix: variant hashing in playground (#5213) 2023-10-30 12:38:32 +01:00
andreas-unleash
6875daf157
feat: add created_by and status columns to change_request_schedule (#5203)
Adds 2 columns to change_request_schedule

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-30 12:01:06 +02:00
Mateusz Kwasniewski
6d17c3b320
feat: cursor based pagination in search (#5174) 2023-10-27 14:16:29 +02:00
Simon Hornby
c9f9fc7521
fix: flaky test (#5172) 2023-10-27 12:52:49 +02:00
Mateusz Kwasniewski
1c8fab63e2
feat: filter by environment status (#5165) 2023-10-27 08:54:03 +02:00
Mateusz Kwasniewski
46d7cb236d
feat: filter by tags (#5163) 2023-10-26 17:20:57 +02:00
andreas-unleash
66cc526855
feat: add scheduledConfigurationChanges flag (#5161)
add scheduledConfigurationChanges flag

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-26 14:00:53 +00:00
Thomas Heartman
acb23e8b87
chore: add CHANGE_REQUEST_SCHEDULED to event types. (#5162)
This is a new event type that will be used to schedule a change
request. It's required in enterprise for the build to work as expected.
2023-10-26 13:41:18 +00:00
Mateusz Kwasniewski
0c8d0704f3
feat: filter features by type (#5160) 2023-10-26 15:29:30 +02:00
Fredrik Strand Oseberg
87fd924be3
refactor: optimize queries (#5158)
This commit will change the join to only get results for either archived
or non-archived features based on the query
2023-10-26 13:38:22 +02:00
Mateusz Kwasniewski
065e588e64
Search by tag (#5156)
add tag search for feature search API
2023-10-26 12:50:02 +02:00
Mateusz Kwasniewski
2c7b7c90e0
refactor: type query params (#5153) 2023-10-26 10:05:47 +02:00
Christopher Kolstad
1bba76413f
feat: make all internal rate limits configurable (#5095)
### What
This PR makes the rate limit for user creation and simple login (our
password based login) configurable in the same way you can do
metricsRateLimiting.

### Worth noting
In addition this PR adds a `rate_limit{endpoint, method}` prometheus
gauge, which gets the data from the UnleashConfig.
2023-10-26 09:20:29 +02:00
David Leek
6fe4740e67
feat: remove feature flag for datadog json template (#5105)
## About the changes

Removes the feature flag for the datadog json template
2023-10-26 09:09:26 +02:00
Mateusz Kwasniewski
de540e09f3
feat: feature search basic functionality (#5150) 2023-10-25 16:12:21 +02:00
Fredrik Strand Oseberg
3ee250ee7d
feat: add feature search service (#5149) 2023-10-25 15:18:52 +02:00
Thomas Heartman
a5d304ca51
1-1531: create db table for cr schedules (#5148)
This PR adds a db table for CR schedules. The table has two columns:
1. `change_request` :: This acts as both a foreign key and as the
primary key for this table.
2. `scheduled_at` :: When the change is scheduled to be applied.

We could use a separate ID column for these rows and put a `unique`
constraint on the `change_request` FK, but I don't think that adds any
more value. However, I'm happy to hear other thoughts around it.
2023-10-25 14:36:03 +02:00
Jaanus Sellin
7039160af0
fix: project mode can not be set to null anymore (#5145) 2023-10-25 14:09:34 +03:00
Mateusz Kwasniewski
705ca1514e
feat: feature search stub (#5143) 2023-10-25 10:50:59 +02:00
Fredrik Strand Oseberg
898c1b4bc7
fix: only get rows for toggles in project (#5141) 2023-10-24 17:26:18 +02:00
Mateusz Kwasniewski
19098808ef
test: speed up the tests (#5140) 2023-10-24 14:31:38 +02:00
Jaanus Sellin
bb136783a3
bug: fix broken links from lychee (#5127)
Fixed https://github.com/Unleash/unleash/issues/5115
2023-10-24 13:22:49 +03:00
Christopher Kolstad
c60bca777f
feat: replace gravatar-url with inline function (#5128)
As #4475 says, MD5 is not available in secure places anymore. This PR
swaps out gravatar-url with an inline function using crypto:sha256 which
is FIPS-140-2 compliant. Since we only used this method for generating
avatar URLs the extra customization wasn't needed and we could hard code
the URL parameters.
 
fixes: Linear
https://linear.app/unleash/issue/SR-112/gh-support-swap-out-gravatar-url-lib
closes: #4475
2023-10-24 10:07:26 +02:00
Mateusz Kwasniewski
ab390dbaab
test: silent migration test (#5131) 2023-10-23 17:14:41 +02:00
Mateusz Kwasniewski
8bc04c59f3
refactor: move metrics service scheduling (#5129) 2023-10-23 16:28:19 +02:00
Mateusz Kwasniewski
8d8a975c6c
Client instance service (#5126) 2023-10-23 15:22:30 +02:00
Mateusz Kwasniewski
1d1aa27ca3
refactor: proxy service scheduler (#5125) 2023-10-23 15:11:38 +02:00
Christopher Kolstad
314a08b4e6
feat: Make multiple roles per group/user GA by removing the flag (#5109)
To prepare for 5.6 GA, 
I've done a find through both Frontend and Backend here to remove the
usages of the flag. Seems like the flag was only in use in the frontend.
@nunogois can you confirm?
2023-10-23 12:32:15 +00:00
Mateusz Kwasniewski
828e463e38
refactor: move version service scheduling to scheduler (#5120) 2023-10-23 09:34:03 +00:00
Fredrik Strand Oseberg
08a1d053dc
feat: add job that cleans last seen every 24 hours (#5114)
This PR adds a cleanup job that removes unknown feature flags from
last_seen_at_metrics table every 24 hours since we no longer have a
foreign key on the name column in the features table.
2023-10-23 11:26:48 +02:00
Jaanus Sellin
ddcd7f47d8
chore: remove invite link flag (#5119) 2023-10-23 12:11:11 +03:00
Gastón Fournier
2aebc8c58e
fix: don't clean up settings when optional data is not present (#5118)
## About the changes
This fixes a bug updating a project, when optional data
(defaultStickiness and featureLimit are not part of the payload).

The problem happens due to:
1. ProjectController does not use the type: UpdateProjectSchema for the
request body (will be addressed in another PR in unleash-enterprise)
2. Project Store interface does not match UpdateProjectSchema (but it
relies on accepting `additional properties: true`, which is what we
agreed on for input)
3. Feature limit is not defined in UpdateProjectSchema (also addressed
in the other PR)
2023-10-23 10:15:25 +02:00
Fredrik Strand Oseberg
71431c7a1d
refactor/last seen at archived (#5102)
Refactor global archive view and project archive view to include last
seen at by environment
2023-10-20 13:17:41 +02:00
Mateusz Kwasniewski
ba758e13c1
test: added tests for has strategies and enabled strategies (#5112) 2023-10-20 12:33:43 +02:00
Mateusz Kwasniewski
433f3e2760
feat: promise timeout on lock (#5108) 2023-10-20 12:10:18 +02:00
Tymoteusz Czech
6fab6633c9
feat: add hasStrategies and hasEnabledStrategies on feature environments (#5012) 2023-10-20 10:50:57 +02:00
Mateusz Kwasniewski
b890df6e12
feat: show warning about dependencies removed on archive (#5104) 2023-10-20 08:58:03 +02:00
Gastón Fournier
b5d9bbaa76
chore: remove ts-ignore and adapt tests (#5103)
## About the changes
Just using proper types and adapting a few tests
2023-10-19 17:17:28 +02:00
Nuno Góis
ba53d392b2
refactor: rename message banners to banners - events (#5100)
https://linear.app/unleash/issue/2-1531/rename-message-banners-to-banners

Follow up to https://github.com/Unleash/unleash/pull/5098
This one adapts the existing events.
2023-10-19 13:53:40 +01:00
andreas-unleash
9cef75d71d
fix/set disableEnvsOnRevive to true (#5101)
Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-19 12:37:17 +00:00
Nuno Góis
957546e305
refactor: rename message banners to banners (#5098)
https://linear.app/unleash/issue/2-1531/rename-message-banners-to-banners

This renames "message banners" to "banners".

I also added support for external banners coming from a `banner` flag
instead of only `messageBanner` flag, so we can eventually migrate to
the new one in the future if we want.
2023-10-19 13:18:25 +01:00
Gastón Fournier
3d9f31f839
feat: ensure at least one owner on remove user/group access (#5085)
## About the changes
This makes sure that projects have at least one owner, either a group or
a user. This is to prevent accidentally losing access to a project.

We check this when removing a user/group or when changing the role of a
user/group

**Note**: We can still leave a group empty as the only owner of the
project, but that's okay because we can still add more users to the
group
2023-10-19 14:14:59 +02:00
andreas-unleash
6760fc0723
fix: add project filter to feature-toggle-list-builder (#5099)
Adds `forProject` filter to FeatureToggleQueryBuilder
Filters playground results for an array of projects

Closes #
[1-1525](https://linear.app/unleash/issue/1-1525/getting-results-for-all-projects-when-defining-a-single-project-in-the)

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-19 15:05:56 +03:00
Mateusz Kwasniewski
de237d844d
feat: detect grandchild dependency (#5094) 2023-10-19 13:14:32 +02:00
Mateusz Kwasniewski
56892c54d9
feat: check if child and parent are in the same project (#5093) 2023-10-19 11:11:05 +02:00
Fredrik Strand Oseberg
7195a63e56
Refactor/last seen at ft list (#5089)
Refactor last seen at for the feature toggle list
2023-10-19 10:58:10 +02:00
Simon Hornby
1ca3e8d893
fix: force deletion of archived toggles when deleting a project (#5080) 2023-10-19 10:45:09 +02:00
Mateusz Kwasniewski
f8855f8234
feat: prevent self dependencies (#5090) 2023-10-19 08:57:23 +02:00
Fredrik Strand Oseberg
cd864ed09e
fix: add sort to deep diff (#5084)
Sort array items before running compare. Feature flag certain properties
of strategy that were previously not present in the /api/admin/features
endpoint.
2023-10-18 16:34:42 +02:00
Mateusz Kwasniewski
1f8d12bcdc
feat: default session id in frontend api (#5083) 2023-10-18 16:19:03 +02:00
Christopher Kolstad
f8fba501ae
fix: update failing snapshot 2023-10-18 14:30:55 +02:00
Thomas Heartman
39aa300c05
fix(tests): correctly set baseUriPath in setupAppWithBaseUrl (#5068)
This appears to be a bug. I can confirm that the base path did not take
effect with the previous incarnation, but this should fix that.
2023-10-18 13:17:56 +02:00
Christopher Kolstad
b06613d1b0
feat: Adds rate limiting to metric POST endpoints (#5075)
### What
The heaviest requests we serve are the register and metrics POSTs from
our SDKs/clients.
This PR adds ratelimiting to /api/client/register, /api/client/metrics,
/api/frontend/register and /api/frontend/metrics with a default set to
6000 requests per minute (or 100 rps) for each of the endpoints.

It will be overrideable by the environment variables documented.

### Points of discussion
@kwasniew already suggested using featuretoggles with variants to
control the rate per clientId. I struggled to see if we could
dynamically update the middleware after initialisation, so this attempt
will need a restart of the pod to update the request limit.
2023-10-18 13:00:44 +02:00
Fredrik Strand Oseberg
3ac8ab898a
fix: log diff (#5072)
Add a deep diff function to investigate diff in logs
2023-10-18 09:25:25 +02:00
Mateusz Kwasniewski
75b131162e
feat: dependent features use new transaction mechanism (#5073) 2023-10-18 08:59:26 +02:00
Gastón Fournier
db04a1eaa8
chore: introduce type to prevent potential issues (#5066)
## About the changes
This small improvement aims to help developers when instantiating
services. They need to be constructed without injecting services or
stores created elsewhere so they can be bound to the same transactional
scope.

This suggests that you need to create the services and stores on your
own
2023-10-17 12:30:44 +02:00
andreas-unleash
cf42a829f4
feat: add option to return disabled strategies (#5059)
Adds the option to include disabled strategies (behind the
playgroundImprovements flag

Closes #
[1-1505](https://linear.app/unleash/issue/1-1505/return-disabled-strategies-in-the-playground-features-request)

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-17 12:35:07 +03:00
Gastón Fournier
08116d008a
chore: GA transactional decorator (#5020)
## About the changes
After testing with the flag enabled and fixing a bug, this is ready to
be GA
2023-10-17 10:47:18 +02:00
Nuno Góis
fd580c9539
fix: extract username from user should not return undefined (#5061)
This fixes a return type error by changing the logic of
`extractUsernameFromUser` to never return undefined.

In the previous code, `user` could be truthy, but that doesn't mean
`email` or `username` were defined. This assumes we always fallback to
"unknown" in those scenarios.
2023-10-17 09:18:44 +01:00
Jaanus Sellin
5619db33ed
feat: import dependencies (#5044) 2023-10-17 08:22:54 +03:00
Mateusz Kwasniewski
e9e110f702
feat: show dependencies only when using pro/enterprise or at least on… (#5052) 2023-10-16 20:56:06 +02:00
Fredrik Strand Oseberg
0064c9e1be
refactor: add tests for /api/client/features (#5057)
add more robust tests for /api/client/features
2023-10-16 16:18:41 +02:00
Gastón Fournier
675ec2e836
chore: add enterprise event (#5056)
This just adds a new event type
2023-10-16 15:37:11 +02:00
Nuno Góis
364e315a3c
feat: add new message banner events (#5055)
https://linear.app/unleash/issue/2-1516/add-new-message-banner-events

Adds new message banner events to help us keep track of changes related
to the new feature.
2023-10-16 14:30:40 +01:00
Fredrik Strand Oseberg
9e493f56a0
refactor: create builder class for converting rows to avoid duplication (#5050)
Create a builder for creating the data structures for feature toggle
list and playground api
2023-10-16 14:19:46 +02:00
Fredrik Strand Oseberg
1a46ab7b12
refactor: add test coverage (#5046)
Adds test coverage for different feature flag paths temporarily
2023-10-16 13:17:26 +02:00
andreas-unleash
8561ba8df7
feat: add playground imrpovements flag (#5045)
Adds the playgroundImprovements flag

Close #
[1-1508](https://linear.app/unleash/issue/1-1508/add-playgroundimprovements-feature-flag)

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-16 14:08:21 +03:00
Fredrik Strand Oseberg
b58d900c2d
fix: feature flag playground features in new store (#5013)
Have playground use the method in the feature-toggle-service instead of
asking the client-feature-toggle-store
2023-10-16 12:29:31 +02:00
Nuno Góis
6c21ed5f74
feat: make maintenance-related 503s more intuitive (#5018)
This makes maintenance-related 503s more intuitive on our UI by
mentioning that maintenance banner is currently enabled.


![image](https://github.com/Unleash/unleash/assets/14320932/43142c58-6b87-4b2d-9239-50f2bb1409e6)
2023-10-16 09:27:29 +01:00
Mateusz Kwasniewski
c41f23ae54
feat: remove dependency on archive (#5040) 2023-10-16 08:59:34 +02:00
Jaanus Sellin
2263a1f062
feat: dependencies import validation (#5023) 2023-10-13 14:17:54 +03:00
Fredrik Strand Oseberg
b6d945befc
refactor: feature toggle list query (#5022)
Cean up huge query method in feature-toggle-store
2023-10-13 12:29:14 +02:00
Mateusz Kwasniewski
3eeafba5f9
feat: validate archive dependent features (#5019) 2023-10-13 12:09:46 +02:00
andreas-unleash
a9a75d5e82
fix: disable all environments when reviving a feature (#4999)
Disable all environments when reviving a feature

Closes #
[SR-93](https://linear.app/unleash/issue/SR-93/disable-all-environments-when-reviving-a-feature)

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-13 10:38:18 +03:00
Jaanus Sellin
a7dd0d6c1a
fix: import segment test and fix (#5017) 2023-10-13 09:40:34 +03:00
Fredrik Strand Oseberg
f34d187cd9
Refactor/separate client and admin store (#5006)
This PR is the first step in separating the client and admin stores.
Currently our feature toggle services uses the client store to serve
multiple purposes. 

Admin API uses the feature toggle service to serve both the feature
toggle list and playground features, while the client API uses the
feature toggle service to serve client features. The admin API can
change often and have very different requirements than the client API,
which changes infrequently and generally keeps the same stable structure
for long periods of time. This architecture is error prone, because when
you need to make changes to the admin API, you can very easily affect
the client API.

I aim to put up a stone wall between the two APIs. Complete separation
between the two APIs, at the cost of some duplication.

In this PR I have created a feature oriented architecture for client
features and disconnected the client API from the feature toggle
service. It now goes through it's own service to it's own store. For
feature toggle service I have duplicated and replaced the functionality
that serves /api/admin/features, I have kept a lot of the ugliness in
the code and haven't removed anything in order to avoid breaking
changes.

Next steps: 
* Move playground to admin API
* Remove client-feature-toggle-store from feature-toggle-service
2023-10-12 13:58:23 +02:00
Jaanus Sellin
7b7a2a706c
fix: enable segment importing for oss (#5010) 2023-10-12 13:43:43 +03:00
Nuno Góis
66304cf8e7
feat: message banners table migration (#5009)
https://linear.app/unleash/issue/2-1485/db-create-migration-for-a-new-internal-message-banners-table

Adds a DB migration for a new `message_banners` table.
2023-10-12 11:27:00 +01:00
Jaanus Sellin
2059706e77
feat: export dependent feature toggles (#5007) 2023-10-12 12:56:10 +03:00
Gastón Fournier
7343183f2d
chore: split interfaces for import and export (#5004)
## About the changes
This splits the interfaces for import and export, especially because the
import functionality has to be replaced in enterprise repo.

This is a breaking change because of the service renames, but I'll have
the PR for the other repository ready so we reduce the time to fix. I
intentionally avoided doing it backward compatible because of time.
2023-10-12 11:34:09 +02:00
Mateusz Kwasniewski
cfcf9de65a
feat: Protect archive feature (#5003) 2023-10-12 08:38:03 +02:00
Mateusz Kwasniewski
30e9fb87e9
feat: prevent adding dependency to archived or removed parent (#4987) 2023-10-11 16:21:57 +02:00
andreas-unleash
4e8c0478bf
fix: export NotFoundError and ISegmentService in internals.ts (#4997)
export NotFoundError and ISegmentService in internals.ts

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-11 14:31:45 +03:00
Jaanus Sellin
69286339fc
feat: make invite link more visible (#4984) 2023-10-11 14:31:32 +03:00
Nuno Góis
65f424156c
feat: re-order message banners (#4995)
https://linear.app/unleash/issue/2-1494/re-order-message-banners

- Re-orders message banners to fit into this logic:

>1. Maintenance banner
>2. External message banner(s) - Most likely coming from Unleash
>3. Internal message banner(s)

- Renames the feature flag to better reflect the feature behavior;
- Lays a basic skeleton structure for this new feature;
2023-10-11 11:55:54 +01:00
Fredrik Strand Oseberg
bc96216daa
Refactor/move features to feature oriented architecture (#4994)
This PR gathers feature related files in the same folder.
2023-10-11 09:38:57 +02:00
Nuno Góis
2222c47d10
feat: add internalMessageBanner feature flag (#4990)
https://linear.app/unleash/issue/2-1487/feature-flag-add-a-new-internalmessagebanner-feature-flag-for-this

Adds a new `internalMessageBanner` feature flag.
2023-10-10 20:03:59 +01:00
Fredrik Strand Oseberg
a2ca7b0d35
Refactor/last seen at read feature overview (#4986)
Refactor feature overview to use the last seen store
2023-10-10 14:40:36 +02:00
Christopher Kolstad
0c069b1385
fix: added await to getActiveUsers tests 2023-10-10 13:23:20 +02:00
Christopher Kolstad
1edd73db45
feat: feature changes counted in new table (#4958)
As part of more telemetry on the usage of Unleash. 

This PR adds a new `stat_` prefixed table as well as a trigger on the
events table trigger on each insert to increment a counter per
environment per day.

The trigger will trigger on every insert into the events base, but will
filter and only increment the counter for events that actually have the
environment set. (there are events, like user-created, that does not
relate to a specific environment).

Bit wary on this, but since we truncate down to row per (day,
environment) combo, finding conflict and incrementing shouldn't take too
long here.

@ivarconr was it something like this you were considering?
2023-10-10 12:32:23 +02:00
Fredrik Strand Oseberg
c97bcc65e6
Refactor/project overview last seen at test (#4979)
Increase test coverage of last seen in project overview
2023-10-10 10:43:45 +02:00
Mateusz Kwasniewski
b4c8f92a26
feat: do not allow to manage dependencies directly with cr enabled (#4971) 2023-10-10 09:25:03 +02:00
Fredrik Strand Oseberg
30d8444c80
fix: refactor getProjectOverview store method (#4972)
This PR cleans up and refactors the feature-strategy-store method
getFeatureOverview to join on the new table and attempts to make the
function more readable by extracting some of the logic into separate
functions. Keeping the LastSeenMapper for now in case there is a reason
to use it for the other endpoints.
2023-10-10 07:34:21 +02:00
Fredrik Strand Oseberg
d896dbd0c7
Fix/last seen at by environment (#4939)
Initial architecture for last seen at by environment.
2023-10-09 10:54:00 +02:00
Gastón Fournier
34fc17146e
chore: improve type on import service (#4962)
## About the changes
Limit import type to what matters
2023-10-09 10:45:19 +02:00
David Leek
e065e2a455
feat: render segments changes in feature strategy update event messages (#4950)
## About the changes

Segment changes in predata and data columns were both showing the new
segments list

Adds formatting of what's changed with segments to feature strategy
update events, so when a user changes the strategy from using
constraints, to using segments instead, it's communicated in event
updates

results in: 

admin updated
[sample-toggle](http://localhost/projects/default/features/sample-toggle)
in project [default](http://localhost/projects/default) by updating
strategy Sample Strategy in development constraints from [userId is one
of (1,2,3)] to empty set of constraints; segments from empty set of
segments to (1)


Closes #
#4912 

### Important files

- `src/lib/services/feature-toggle-service.ts` - Segment changes in
preData and data
- `src/lib/addons/feature-event-formatter-md.ts` - Formatting segments

## Discussion points

This is an SR least effort PR - we should plan a task where we look at
how to render this list of segments in a more comprehensible way (it's
just rendering ids now)
2023-10-09 09:11:39 +02:00
Nuno Góis
e0faa3e842
fix: typo in enabled event (#4960)
Fixes a typo where we would send `disabled` for `enabled` events.


https://unleash-community.slack.com/archives/C03GWTN7XMG/p1696631381409369
2023-10-08 19:22:12 +02:00
Gastón Fournier
c3e8d743bc
chore: Improve UI Config type (#4959)
Fix link types
2023-10-06 16:31:39 +02:00
Mateusz Kwasniewski
8b0cf8b11d
feat: allow to delete dependencies when no orphans (#4952) 2023-10-06 13:39:16 +02:00
Gastón Fournier
52fa872fe6
chore: handle transactions already started at the controller layer (#4953)
## About the changes
This PR adds a method to safeguard us from opening a new transaction
while inside another transaction, resulting in two isolated transactions
that will not be atomic (if one fails, the other might still complete
successfully).


bbbe4d4637/lib/knex-builder/make-knex.js (L143C5-L144C88)

We're currently opening transactions at the controller layer 

2746bd1517/src/lib/features/export-import-toggles/export-import-controller.ts (L206-L208)

but in some other places, we do it at the store level:

2746bd1517/src/lib/db/access-store.ts (L577)


## Alternative
We can remove store-level transactions and move them to the controller
following this approach:


cb034976b9/src/lib/services/index.ts (L282-L284)


cb034976b9/src/lib/features/export-import-toggles/export-import-controller.ts (L206-L208)

This option is more expensive because we have to:
1. Write the factory methods that propagate the transaction to the
stores (therefore creating the store factory methods as well)
2. Identify the methods for creating the transactions at the store level
and backtrack the calls until the controller layer
2023-10-06 13:38:32 +02:00
Jonas Strømsodd
80c4a8277c
feat: allow defining initial admin user as env variable (#4927)
Closes #4560
2023-10-06 09:07:06 +02:00
David Leek
40ebb7ef95
fix: only delete SSO-synced group membership where membership was added by SSO sync (#4929)
Fixes an issue where SSO group sync would delete a syncable group that a
user was manually added to

## Discussion points

Is this the longterm fix for this? Or would we want another column in
the mapping table for future-proofing this?
2023-10-05 13:22:46 +02:00
Mateusz Kwasniewski
2c7587ba4b
feat: dependent features in playground (#4930) 2023-10-05 13:05:20 +02:00
Gastón Fournier
0da48cc0d1
chore: revamp transactional impl (#4916)
## About the changes
This transactional implementation decorates a service with a
transactional method that removes the need to start transactions in the
method using the service.

This is a gradual rollout with a feature toggle, just because
transactions are not easy.
2023-10-04 15:16:37 +02:00
Mateusz Kwasniewski
bc650ffe3f
feat: flag for clone dependencies (#4922) 2023-10-04 13:29:36 +02:00
Mateusz Kwasniewski
257414424d
feat: copy feature with parent (#4918) 2023-10-04 12:20:27 +02:00
Mateusz Kwasniewski
5141d9db67
feat: change project with feature dependencies (#4915) 2023-10-04 12:16:52 +02:00
andreas-unleash
b07c032d56
fix: update potentially-stale status dynamically (#4905)
Fixes 2 bugs:

- project-health-service keeping the feature types as an instance
variable and only updating it once was preventing real calculation to
happen if the lifetime value changed for a feature toggle type
- the ui was reading from a predefined map for the lifetime values so
they would never reflect the BE change

Closes #
[SR-66](https://linear.app/unleash/issue/SR-66/slack-question-around-potentially-stale-and-its-uses)

<img width="1680" alt="Screenshot 2023-10-02 at 14 37 17"
src="https://github.com/Unleash/unleash/assets/104830839/7bee8d4a-9054-4214-a1a2-11ad8169c3d5">
<img width="1660" alt="Screenshot 2023-10-02 at 14 37 06"
src="https://github.com/Unleash/unleash/assets/104830839/23bf55c7-a380-4423-a732-205ad81d5c3c">

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2023-10-04 12:47:16 +03:00
Mateusz Kwasniewski
88305a6388
feat: prevent delete and archive on parent feature (#4913) 2023-10-04 09:27:53 +02:00