1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-28 00:06:53 +01:00
Commit Graph

10506 Commits

Author SHA1 Message Date
David Leek
adb6f61015
chore: proxy repository load features metrics (#6314)
## About the changes

- Adds createHistogram
- Adds histogram metrics for proxy-repositorys loading features
2024-02-22 14:29:21 +01:00
David Leek
3bfafcf87e
chore: remove redundant check for project names in db (#6311)
Skips the fetching project names from db part in the proxy-repository
that was done when the token had ALL_PROJECTS
2024-02-22 13:44:47 +01:00
Mateusz Kwasniewski
dc214d376a
chore: generate orval types (#6310) 2024-02-22 12:50:17 +01:00
Mateusz Kwasniewski
81ab77cf7c
feat: schema for paginated applications (#6309) 2024-02-22 12:18:23 +01:00
Mateusz Kwasniewski
ff70a92956
feat: paginated applications view (#6308) 2024-02-22 11:28:36 +01:00
Mateusz Kwasniewski
c64a780a13
feat: warning mode app env styling (#6305) 2024-02-22 08:41:50 +01:00
Jaanus Sellin
3c4457af00
feat: application overview backend (#6303) 2024-02-22 08:20:57 +02:00
Nuno Góis
6246459926
chore: db drop action_states (#6300)
Follow up to: https://github.com/Unleash/unleash/pull/6298

We no longer need this table, since it was superseded by `action_events`
and is no longer used.
I believe it's safe to drop this table right away since the feature is
not being used yet.
2024-02-21 17:32:08 +00:00
Nuno Góis
4a4d5388d9
chore: action_set_events db table migration (#6298)
https://linear.app/unleash/issue/2-1962/implement-new-action-events-logic

Adds a new `action_set_events` table for the new action events logic.

Even though observable events are technically immutable, we're storing
the observable event along with the action set event. This allows us to
avoid 1 join while allowing us to persist action set event information
after deleting observable events, if we wish to do so at a later stage.
2024-02-21 14:02:19 +00:00
Fredrik Strand Oseberg
0ccfc29e26
fix: generalize multi action button (#6294)
This PR moves the CR specific logic out of the MultiActionButton and
generalises so that we can re-use it across the application. The CR
specific logic is moved into:

* ApplyButton.tsx
* ReviewButton.tsx

This fixes a bug where multi action button would be disabled if you
tried to apply an approved change request that you had created yourself.
2024-02-21 14:37:35 +01:00
Mateusz Kwasniewski
ac183e76f8
feat: Application elements lines (#6301) 2024-02-21 14:34:57 +01:00
Mateusz Kwasniewski
56cbe1485e
feat: styled application environment boxes (#6296) 2024-02-21 12:15:54 +01:00
Jaanus Sellin
7baed29c07
feat: application overview schema (#6295) 2024-02-21 12:59:55 +02:00
andreas-unleash
60754b9fca
chore: generate new orval types (#6292)
what it says on the box

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2024-02-21 11:31:06 +02:00
David Leek
869e33138b
chore: adds killswitch to scheduled per sec caches (#6291)
## About the changes

Adds killswitches to update revision id and publish unpublished events
2024-02-21 10:12:23 +01:00
Thomas Heartman
c7182d8faf
fix: adjust padding of problem detected icon (#6293)
This PR adjusts the vertical position of the problem detected icon in
the environment selector.

<img width="1137" alt="image"
src="https://github.com/Unleash/unleash/assets/17786332/ef961bba-6380-4849-a81a-0468fc467b5c">
2024-02-21 10:58:14 +02:00
Mateusz Kwasniewski
e5c07f00cb
feat: rate limit password reset attempts (#6257) 2024-02-21 08:49:54 +01:00
Jaanus Sellin
f3c01545f2
feat: application graph (#6279)
Basic graph, that works with mock data.
Next steps, work on backend and try to put more content and **styling to
nodes**.

![image](https://github.com/Unleash/unleash/assets/964450/545d6527-ecd8-4010-a0fe-8001bc8c1456)
2024-02-21 09:13:18 +02:00
Thomas Heartman
f46d420b10
feat: add warning icons to environments in selector (#6290)
This PR adds warning icons to the environment selector for environments
that have problems detected. However, because we don't have any way
detect problems yet, this PR only adds the icons and the infrastructure
to display them. They're always set to "not displayed" for now.

The icons have "problems detected" as accessible text.

It looks like this when you add them in (for every environment):

<img width="1137" alt="image"
src="https://github.com/Unleash/unleash/assets/17786332/c29bfa52-ddee-4b16-b3ac-5c1f8fcc326e">
2024-02-21 13:28:37 +08:00
Thomas Heartman
ddae97080d
feat: wrap buttons in a fieldset and add an explanatory legend. (#6289)
This makes it more obvious to everyone what the buttons do.
2024-02-21 12:15:02 +08:00
renovate[bot]
e96f0c22af
chore(deps): update node.js to v18.19.1 (#6287)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [node](https://togithub.com/nodejs/node) | final | patch |
`18.19.0-alpine` -> `18.19.1-alpine` |
| [node](https://togithub.com/nodejs/node) | stage | patch |
`18.19.0-alpine` -> `18.19.1-alpine` |

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

###
[`v18.19.1`](https://togithub.com/nodejs/node/releases/tag/v18.19.1):
2024-02-14, Version 18.19.1 &#x27;Hydrogen&#x27; (LTS),
@&#8203;RafaelGSS prepared by @&#8203;marco-ippolito

[Compare
Source](https://togithub.com/nodejs/node/compare/v18.19.0...v18.19.1)

##### Notable changes

This is a security release.

##### Notable changes

- CVE-2024-21892 - Code injection and privilege escalation through Linux
capabilities- (High)
- CVE-2024-22019 - http: Reading unprocessed HTTP request with unbounded
chunk extension allows DoS attacks- (High)
- CVE-2023-46809 - Node.js is vulnerable to the Marvin Attack (timing
variant of the Bleichenbacher attack against
[PKCS#1](https://togithub.com/PKCS/node/issues/1) v1.5 padding) -
(Medium)
- CVE-2024-22025 - Denial of Service by resource exhaustion in fetch()
brotli decoding - (Medium)
-   undici version 5.28.3
-   npm version 10.2.4

##### Commits

- \[[`69e0a1dba8`](https://togithub.com/nodejs/node/commit/69e0a1dba8)]
- **crypto**: update root certificates to NSS 3.95 (Node.js GitHub Bot)
[#&#8203;50805](https://togithub.com/nodejs/node/pull/50805)
- \[[`d3d357ab09`](https://togithub.com/nodejs/node/commit/d3d357ab09)]
- **crypto**: disable [PKCS#1](https://togithub.com/PKCS/node/issues/1)
padding for privateDecrypt (Michael Dawson)
[nodejs-private/node-private#525](https://togithub.com/nodejs-private/node-private/pull/525)
- \[[`3d27175c42`](https://togithub.com/nodejs/node/commit/3d27175c42)]
- **deps**: fix GHSA-f74f-cvh7-c6q6/CVE-2024-24806 (Santiago Gimeno)
[#&#8203;51614](https://togithub.com/nodejs/node/pull/51614)
- \[[`331558b8ab`](https://togithub.com/nodejs/node/commit/331558b8ab)]
- **deps**: update archs files for openssl-3.0.13+quic1 (Node.js GitHub
Bot) [#&#8203;51614](https://togithub.com/nodejs/node/pull/51614)
- \[[`99b77dfb9c`](https://togithub.com/nodejs/node/commit/99b77dfb9c)]
- **deps**: upgrade openssl sources to quictls/openssl-3.0.13+quic1
(Node.js GitHub Bot)
[#&#8203;51614](https://togithub.com/nodejs/node/pull/51614)
- \[[`6cdc71bff1`](https://togithub.com/nodejs/node/commit/6cdc71bff1)]
- **deps**: upgrade npm to 10.2.4 (npm team)
[#&#8203;50751](https://togithub.com/nodejs/node/pull/50751)
- \[[`911cb33cda`](https://togithub.com/nodejs/node/commit/911cb33cda)]
- **http**: add maximum chunk extension size (Paolo Insogna)
[nodejs-private/node-private#520](https://togithub.com/nodejs-private/node-private/pull/520)
- \[[`f48b89689d`](https://togithub.com/nodejs/node/commit/f48b89689d)]
- **lib**: update undici to v5.28.3 (Matteo Collina)
[nodejs-private/node-private#536](https://togithub.com/nodejs-private/node-private/pull/536)
- \[[`e6b4c105e0`](https://togithub.com/nodejs/node/commit/e6b4c105e0)]
- **src**: fix HasOnly(capability) in node::credentials (Tobias Nießen)
[nodejs-private/node-private#505](https://togithub.com/nodejs-private/node-private/pull/505)
- \[[`97c49076cd`](https://togithub.com/nodejs/node/commit/97c49076cd)]
- **test**: skip test-child-process-stdio-reuse-readable-stdio on
Windows (Joyee Cheung)
[#&#8203;49621](https://togithub.com/nodejs/node/pull/49621)
- \[[`60affdde8e`](https://togithub.com/nodejs/node/commit/60affdde8e)]
- **tools**: add macOS notarization verification step (Ulises Gascón)
[#&#8203;50833](https://togithub.com/nodejs/node/pull/50833)
- \[[`ccc676a327`](https://togithub.com/nodejs/node/commit/ccc676a327)]
- **tools**: use macOS keychain to notarize the releases (Ulises Gascón)
[#&#8203;50715](https://togithub.com/nodejs/node/pull/50715)
- \[[`31f1ceb380`](https://togithub.com/nodejs/node/commit/31f1ceb380)]
- **tools**: remove unused file (Ulises Gascon)
[#&#8203;50622](https://togithub.com/nodejs/node/pull/50622)
- \[[`bd5f6fb92a`](https://togithub.com/nodejs/node/commit/bd5f6fb92a)]
- **tools**: add macOS notarization stapler (Ulises Gascón)
[#&#8203;50625](https://togithub.com/nodejs/node/pull/50625)
- \[[`4168c4f71b`](https://togithub.com/nodejs/node/commit/4168c4f71b)]
- **tools**: improve macOS notarization process output readability
(Ulises Gascón)
[#&#8203;50389](https://togithub.com/nodejs/node/pull/50389)
- \[[`4622f775aa`](https://togithub.com/nodejs/node/commit/4622f775aa)]
- **tools**: remove unused `version` function (Ulises Gascón)
[#&#8203;50390](https://togithub.com/nodejs/node/pull/50390)
- \[[`b90804b1e7`](https://togithub.com/nodejs/node/commit/b90804b1e7)]
- **win,tools**: upgrade Windows signing to smctl (Stefan Stojanovic)
[#&#8203;50956](https://togithub.com/nodejs/node/pull/50956)
- \[[`f31d47e135`](https://togithub.com/nodejs/node/commit/f31d47e135)]
- **zlib**: pause stream if outgoing buffer is full (Matteo Collina)
[nodejs-private/node-private#542](https://togithub.com/nodejs-private/node-private/pull/542)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am
every weekday" in timezone Europe/Madrid, Automerge - At any time (no
schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates 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://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-21 00:57:34 +00:00
renovate[bot]
2ae750577b
fix(deps): update dependency unleash-client to v5.5.0 (#6286)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [unleash-client](https://togithub.com/Unleash/unleash-client-node) |
[`5.5.0-beta.1` ->
`5.5.0`](https://renovatebot.com/diffs/npm/unleash-client/5.5.0-beta.1/5.5.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/unleash-client/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/unleash-client/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/unleash-client/5.5.0-beta.1/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/unleash-client/5.5.0-beta.1/5.5.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>Unleash/unleash-client-node (unleash-client)</summary>

###
[`v5.5.0`](https://togithub.com/Unleash/unleash-client-node/releases/tag/v5.5.0)

[Compare
Source](https://togithub.com/Unleash/unleash-client-node/compare/v5.5.0-beta.1...v5.5.0)

#### What's Changed

- feat: prevent double start by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[https://github.com/Unleash/unleash-client-node/pull/580](https://togithub.com/Unleash/unleash-client-node/pull/580)
- chore: upgrade make-fetch-happen by
[@&#8203;kwasniew](https://togithub.com/kwasniew) in
[https://github.com/Unleash/unleash-client-node/pull/583](https://togithub.com/Unleash/unleash-client-node/pull/583)

**Full Changelog**:
https://github.com/Unleash/unleash-client-node/compare/v5.4.0...v5.5.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am
every weekday" in timezone Europe/Madrid, Automerge - At any time (no
schedule defined).

🚦 **Automerge**: Enabled.

♻ **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://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 22:08:09 +00:00
renovate[bot]
a7b0c9d60b
chore(deps): update dependency @swc/core to v1.4.1 (#6285)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [@swc/core](https://swc.rs)
([source](https://togithub.com/swc-project/swc)) | [`1.4.0` ->
`1.4.1`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.4.0/1.4.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.4.0/1.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.4.0/1.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>swc-project/swc (@&#8203;swc/core)</summary>

###
[`v1.4.1`](https://togithub.com/swc-project/swc/blob/HEAD/CHANGELOG.md#141---2024-02-13)

[Compare
Source](https://togithub.com/swc-project/swc/compare/v1.4.0...v1.4.1)

##### Bug Fixes

- **(binding/types)** Update typings for `options.envs` to match
implementation
([#&#8203;8620](https://togithub.com/swc-project/swc/issues/8620))
([2a115cf](2a115cff71))

- **(es/compat)** Visit AssignExpr right branch in FnEnvHoister
([#&#8203;8633](https://togithub.com/swc-project/swc/issues/8633))
([e5d6de0](e5d6de0ea9))

- **(es/decorators)** Do not insert duplicate constructors
([#&#8203;8631](https://togithub.com/swc-project/swc/issues/8631))
([21a447f](21a447f35a))

- **(es/parser)** Set class property to `abstract` or `override` even in
error states
([#&#8203;8610](https://togithub.com/swc-project/swc/issues/8610))
([5a77306](5a773061db))

- **(es/parser)** Fix parsing of dynamic source phase imports
([#&#8203;8611](https://togithub.com/swc-project/swc/issues/8611))
([7d724d8](7d724d8ea3))

- **(es/parser)** Rescan `<<` as `<` when parsing type args
([#&#8203;8607](https://togithub.com/swc-project/swc/issues/8607))
([9e6dad9](9e6dad9baf))

- **(es/parser)** Fix detection of `use strict` directive
([#&#8203;8617](https://togithub.com/swc-project/swc/issues/8617))
([95236e9](95236e9abe))

- **(es/plugin)** Fix schema version issue
([#&#8203;8621](https://togithub.com/swc-project/swc/issues/8621))
([132be95](132be95173))

- **(es/quote)** Allow variables typed `AssignTarget`
([#&#8203;8602](https://togithub.com/swc-project/swc/issues/8602))
([6a48be4](6a48be4b6b))

- **(es/quote)** Support `AssignTarget`, really
([#&#8203;8603](https://togithub.com/swc-project/swc/issues/8603))
([ef91661](ef916614f1))

- **(es/quote)** Fix code generation of `AssignTarget`
([#&#8203;8604](https://togithub.com/swc-project/swc/issues/8604))
([16e9d4c](16e9d4ca31))

##### Features

- **(es/minifier)** Implement correct `hoist_props`
([#&#8203;8593](https://togithub.com/swc-project/swc/issues/8593))
([3122e94](3122e944a8))

##### Miscellaneous Tasks

- **(config)** Remove an empty file in `swc_config`
([#&#8203;8609](https://togithub.com/swc-project/swc/issues/8609))
([d87fef0](d87fef0fea))

- **(preset-env)** Update `browserslist-rs`
([#&#8203;8614](https://togithub.com/swc-project/swc/issues/8614))
([e5585e9](e5585e99f1))

##### Refactor

- **(bindings)** Remove bindings for experimental packages
([#&#8203;8600](https://togithub.com/swc-project/swc/issues/8600))
([6c50ff1](6c50ff1bec))

##### Testing

- **(es)** Update `tsc` conformance test suite
([#&#8203;8615](https://togithub.com/swc-project/swc/issues/8615))
([c0beba7](c0beba7708))

- Update `@swc/plguin-jest` used for plugin e2e testing
([#&#8203;8601](https://togithub.com/swc-project/swc/issues/8601))
([95fe3db](95fe3dbe93))

##### Build

- **(cargo)** Update `rustc` to `nightly-2024-02-06`
([#&#8203;8618](https://togithub.com/swc-project/swc/issues/8618))
([6726b63](6726b631e6))

- **(plugin)** Update `wasmer` to `v4.2.5`
([#&#8203;8624](https://togithub.com/swc-project/swc/issues/8624))
([4e0d240](4e0d240895))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am
every weekday" in timezone Europe/Madrid, Automerge - At any time (no
schedule defined).

🚦 **Automerge**: Enabled.

♻ **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://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 19:37:46 +00:00
Nuno Góis
17c0d7137f
chore: add action state db indexes (#6283)
Adds some relevant indexes to `action_states`, useful for our new
"action events" query.
2024-02-20 15:45:33 +00:00
Christopher Kolstad
7350c91a1e
fix: display all roles if we can't get project roles 2024-02-20 16:23:25 +01:00
Gastón Fournier
b22b4233cb
chore: add vite resolution (#6284)
## About the changes
Some transitive dependencies still depends on vite@5.0.0 so this should
bring them up to 5.1.3
2024-02-20 16:20:32 +01:00
Christopher Kolstad
e9d9db17fe
feat: Adding Project access requires same role (#6270)
In order to prevent users from being able to assign roles/permissions
they don't have, this PR adds a check that the user performing the
action either is Admin, Project owner or has the same role they are
trying to grant/add.

This addAccess method is only used from Enterprise, so there will be a
separate PR there, updating how we return the roles list for a user, so
that our frontend can only present the roles a user is actually allowed
to grant.

This adds the validation to the backend to ensure that even if the
frontend thinks we're allowed to add any role to any user here, the
backend can be smart enough to stop it.

We should still update frontend as well, so that it doesn't look like we
can add roles we won't be allowed to.
2024-02-20 15:56:53 +01:00
Ivar Conradi Østhus
4857a73621
fix: upgrade vite to v5.1.3 (#6282) 2024-02-20 13:50:06 +00:00
Christopher Kolstad
7f5d3df59c
docs: add ADR for logging with error object (#6249)
I've held an internal knowledge sharing session on this already. If
someone can think of a better phrasing for the background, I'm all ears.
I think it's just nice to have this documented, so people remember that
our logging framework already has a good way to format errors when you
use the API `logger.error("<message>", e)`
2024-02-20 13:41:33 +00:00
Gastón Fournier
dd87eabefc
chore: upgrade vite dependency (#6281)
## About the changes
Just `cd frontend && yarn upgrade vite` to solve
https://github.com/Unleash/unleash/security/dependabot/119
2024-02-20 13:53:58 +01:00
Gastón Fournier
7b8c1f0d04
chore: regenerate yarn.lock of docker folder (#6280)
## About the changes
Regenerate yarn.lock from docker folder: `rm cloud/yarn.lock && cd cloud
&& yarn install`

Resolves: https://github.com/Unleash/unleash/security/dependabot/120
2024-02-20 12:33:41 +01:00
Ivar Conradi Østhus
ef3f7dae55
fix: upgrade nodemailer to v6.9.9 (#6278) 2024-02-20 11:38:26 +01:00
Gastón Fournier
9c156ac31f
chore: avoid printing out warnings from known frontend proxies (#6271)
## About the changes
Our frontend API creates new instances of unleash-client-proxy. Because
this is by-design, we don't want to log a warning that was designed to
warn users about potential misconfiguration of Unleash Proxy.

As an extra, I'm renaming ProxyController to FrontendAPIController to
better reflect the intent of this controller.
2024-02-20 11:27:21 +01:00
Thomas Heartman
a468c55fc7
feat: add environment selection to connected instances screen (#6277)
This PR adds an environment selector to the connected instances table,
using query parameters to store the environment selection.

I'm still using the old data to populate this, so it'll show you all
data when nothing is selected and only filtered data when you select an
env. There is no way to unselect an env at the moment: I'm not sure
that's something we'll need to do, so we'll handle that when we know.

I imagine in the future, we might update the component to make separate
calls per environments and a call to determine which envs are available,
but for now, this will do just fine.

<img width="848" alt="image"
src="https://github.com/Unleash/unleash/assets/17786332/ef7562d5-c0ab-48c6-ba43-7c0007719ab4">
2024-02-20 12:14:44 +02:00
Gastón Fournier
a9cd81a61c
chore: pin ip library (#6276)
## About the changes
Add resolution to IP library so transitive dependencies also use the
latest library
2024-02-20 10:37:27 +01:00
Thomas Heartman
d967d4adb0
feat: add tabs (#6267)
This PR adds a new file "Application.tsx", which is analogous to the
existing Project.tsx file in that it contains the base layout for the
application page, as well as tabs pointing to sub pages. Currently, the
overview tab uses a paragraph with some fallback text, while the
connected instances table displays the instances table.

I have mostly copied the existing ApplicationEdit component and used
that as a base, assuming that we'll delete that component when we're
done with this.

<img width="1449" alt="image"
src="https://github.com/Unleash/unleash/assets/17786332/ac574a83-3cf4-4de5-a4de-188575074ecb">
2024-02-20 17:32:33 +08:00
Nuno Góis
7e6a3c7e69
fix: clickable names in inc wh and action tables (#6275)
https://linear.app/unleash/issue/2-1954/make-names-clickable-in-actions-and-incoming-webhooks

Makes names clickable in the incoming webhook and action tables. When
clicked, they open the edit form for that resource.


![image](https://github.com/Unleash/unleash/assets/14320932/973f38c0-2603-4cbf-9352-90ddfe0b6e3f)


![image](https://github.com/Unleash/unleash/assets/14320932/ff733899-b86a-494a-8d2c-65d53e19a356)
2024-02-20 09:28:00 +00:00
renovate[bot]
86b9ba79d7
chore(deps): update dependency node to v18.19.1 (#6274)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [node](https://nodejs.org)
([source](https://togithub.com/nodejs/node)) | patch | `18.19.0` ->
`18.19.1` |

---

### Release Notes

<details>
<summary>nodejs/node (node)</summary>

###
[`v18.19.1`](https://togithub.com/nodejs/node/compare/v18.19.0...v18.19.1)

[Compare
Source](https://togithub.com/nodejs/node/compare/v18.19.0...v18.19.1)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am
every weekday" in timezone Europe/Madrid, Automerge - At any time (no
schedule defined).

🚦 **Automerge**: Enabled.

♻ **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://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-20 01:16:03 +00:00
renovate[bot]
5cb691e4ea
chore(deps): update dependency @types/node to v18.19.15 (#6273)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[@types/node](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node))
| [`18.19.14` ->
`18.19.15`](https://renovatebot.com/diffs/npm/@types%2fnode/18.19.14/18.19.15)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/18.19.15?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fnode/18.19.15?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fnode/18.19.14/18.19.15?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/18.19.14/18.19.15?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am
every weekday" in timezone Europe/Madrid, Automerge - At any time (no
schedule defined).

🚦 **Automerge**: Enabled.

♻ **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://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-19 21:16:41 +00:00
renovate[bot]
c3db90d8c4
chore(deps): update dependency @types/semver to v7.5.7 (#6272)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[@types/semver](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/semver)
([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/semver))
| [`7.5.6` ->
`7.5.7`](https://renovatebot.com/diffs/npm/@types%2fsemver/7.5.6/7.5.7)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fsemver/7.5.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2fsemver/7.5.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2fsemver/7.5.6/7.5.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fsemver/7.5.6/7.5.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am
every weekday" in timezone Europe/Madrid, Automerge - At any time (no
schedule defined).

🚦 **Automerge**: Enabled.

♻ **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://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMDAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-19 19:28:06 +00:00
Ivar Conradi Østhus
851b3db39a
docs: tutorial on node-sdk with aws lambda (#6258)
This is a docs tutorial on how to use the Unleash Node SDK in an AWS
Lambda.

(Peer reviewed outside of Git.)
2024-02-19 17:29:10 +01:00
andreas-unleash
f71badd255
feat: dashboard project filtering (#6259)
Adds the same project selector Autocomplete as we use in the playground.
Implements the filtering 

Closes: #
[1-2036](https://linear.app/unleash/issue/1-2036/api-project-filtering)

<img width="1508" alt="Screenshot 2024-02-16 at 15 57 24"
src="https://github.com/Unleash/unleash/assets/104830839/4490e43c-17db-41b6-ba75-e7b0f2df0522">

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
2024-02-19 16:28:03 +02:00
Nuno Góis
9b980bb212
fix: small ui/ux adjustments to the actions form (#6269)
Small UI/UX adjustments to the actions form after aligning.


![image](https://github.com/Unleash/unleash/assets/14320932/5ededf9c-af54-4628-8fb3-0fcc6afc87dc)
2024-02-19 13:22:18 +00:00
Gastón Fournier
a007ddd5df
Revert "chore(deps): update dependency husky to v9" (#6268)
Reverts Unleash/unleash#6232

Husky 
-   Transitioned to `ESM` for module usage.
-   Dropped support for Node 14 and 16.

I believe the first is causing an issue with our build. I tried fixing
this but didn't succeed, so I'm reverting
2024-02-19 12:42:45 +01:00
renovate[bot]
34ecc923cb
chore(deps): update dependency husky to v9 (#6232)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

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

---

### Release Notes

<details>
<summary>typicode/husky (husky)</summary>

###
[`v9.0.11`](https://togithub.com/typicode/husky/releases/tag/v9.0.11)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.10...v9.0.11)

- chore: update package-lock.json by
[@&#8203;btea](https://togithub.com/btea) in
[https://github.com/typicode/husky/pull/1383](https://togithub.com/typicode/husky/pull/1383)
- fix: husky=0 in init (fixes
[#&#8203;1393](https://togithub.com/typicode/husky/issues/1393)) by
[@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1395](https://togithub.com/typicode/husky/pull/1395)

###
[`v9.0.10`](https://togithub.com/typicode/husky/releases/tag/v9.0.10)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.9...v9.0.10)

- fix: rename index.d.ts to index.d.mts by
[@&#8203;mrkjdy](https://togithub.com/mrkjdy) in
[https://github.com/typicode/husky/pull/1379](https://togithub.com/typicode/husky/pull/1379)

### [`v9.0.9`](https://togithub.com/typicode/husky/releases/tag/v9.0.9)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.8...v9.0.9)

- refactor: rename files by
[@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1378](https://togithub.com/typicode/husky/pull/1378)

### [`v9.0.8`](https://togithub.com/typicode/husky/releases/tag/v9.0.8)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.7...v9.0.8)

- docs: update index.md by
[@&#8203;khaledYS](https://togithub.com/khaledYS) in
[https://github.com/typicode/husky/pull/1369](https://togithub.com/typicode/husky/pull/1369)
- Fix tab detection on install command by
[@&#8203;glensc](https://togithub.com/glensc) in
[https://github.com/typicode/husky/pull/1376](https://togithub.com/typicode/husky/pull/1376)
- refactor: reduce file size by
[@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1377](https://togithub.com/typicode/husky/pull/1377)

### [`v9.0.7`](https://togithub.com/typicode/husky/releases/tag/v9.0.7)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.6...v9.0.7)

-   fix: typo and source `~/.huskyrc` correctly (compatibility with v8)
- docs: fix example by [@&#8203;typicode](https://togithub.com/typicode)
in
[https://github.com/typicode/husky/pull/1363](https://togithub.com/typicode/husky/pull/1363)

### [`v9.0.6`](https://togithub.com/typicode/husky/releases/tag/v9.0.6)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.5...v9.0.6)

- docs: add favicon by [@&#8203;rakleed](https://togithub.com/rakleed)
in
[https://github.com/typicode/husky/pull/1354](https://togithub.com/typicode/husky/pull/1354)
- chore: apply editorconfig to code only by
[@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1355](https://togithub.com/typicode/husky/pull/1355)
- docs: update install script to mjs and fix CI checks by
[@&#8203;starnayuta](https://togithub.com/starnayuta) in
[https://github.com/typicode/husky/pull/1357](https://togithub.com/typicode/husky/pull/1357)
- Fix unbound variable by
[@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1359](https://togithub.com/typicode/husky/pull/1359)

### [`v9.0.5`](https://togithub.com/typicode/husky/releases/tag/v9.0.5)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.4...v9.0.5)

- docs: update path to startup files by
[@&#8203;ManuelRauber](https://togithub.com/ManuelRauber) in
[https://github.com/typicode/husky/pull/1350](https://togithub.com/typicode/husky/pull/1350)
- fix: init error by [@&#8203;typicode](https://togithub.com/typicode)
in
[https://github.com/typicode/husky/pull/1353](https://togithub.com/typicode/husky/pull/1353)

### [`v9.0.4`](https://togithub.com/typicode/husky/releases/tag/v9.0.4)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.3...v9.0.4)

- fix: init create dir before by
[@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1348](https://togithub.com/typicode/husky/pull/1348)
- refactor: simplify by
[@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1349](https://togithub.com/typicode/husky/pull/1349)
- fix: init not working on pnpm
[#&#8203;1334](https://togithub.com/typicode/husky/issues/1334) by
[@&#8203;rozbo](https://togithub.com/rozbo) in
[https://github.com/typicode/husky/pull/1347](https://togithub.com/typicode/husky/pull/1347)

### [`v9.0.3`](https://togithub.com/typicode/husky/releases/tag/v9.0.3)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.2...v9.0.3)

- docs: fix link by [@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1340](https://togithub.com/typicode/husky/pull/1340)
- chore: fix links in issue template by
[@&#8203;julien-f](https://togithub.com/julien-f) in
[https://github.com/typicode/husky/pull/1341](https://togithub.com/typicode/husky/pull/1341)
- fix: add scripts field if not present by
[@&#8203;chalkygames123](https://togithub.com/chalkygames123) in
[https://github.com/typicode/husky/pull/1338](https://togithub.com/typicode/husky/pull/1338)
- docs: changelog link by
[@&#8203;typicode](https://togithub.com/typicode) in
[https://github.com/typicode/husky/pull/1343](https://togithub.com/typicode/husky/pull/1343)
- fix: insert final newline by
[@&#8203;chalkygames123](https://togithub.com/chalkygames123) in
[https://github.com/typicode/husky/pull/1339](https://togithub.com/typicode/husky/pull/1339)
- fix: fix git hooks path on windows by
[@&#8203;rozbo](https://togithub.com/rozbo) in
[https://github.com/typicode/husky/pull/1346](https://togithub.com/typicode/husky/pull/1346)

### [`v9.0.2`](https://togithub.com/typicode/husky/releases/tag/v9.0.2)

[Compare
Source](https://togithub.com/typicode/husky/compare/v9.0.1...v9.0.2)

#### What's Changed

- fix: exit code by
[@&#8203;gergelypap](https://togithub.com/gergelypap) in
[https://github.com/typicode/husky/pull/1336](https://togithub.com/typicode/husky/pull/1336)
- docs: typo by
[@&#8203;chalkygames123](https://togithub.com/chalkygames123) in
[https://github.com/typicode/husky/pull/1337](https://togithub.com/typicode/husky/pull/1337)

#### New Contributors

- [@&#8203;gergelypap](https://togithub.com/gergelypap) made their first
contribution in
[https://github.com/typicode/husky/pull/1336](https://togithub.com/typicode/husky/pull/1336)

**Full Changelog**:
https://github.com/typicode/husky/compare/v9.0.1...v9.0.2

### [`v9.0.1`](https://togithub.com/typicode/husky/releases/tag/v9.0.1)

[Compare
Source](https://togithub.com/typicode/husky/compare/v8.0.3...v9.0.1)

<p align="center">
Kicking off the year with an exciting update!
</p>

<p align="center">
<img
src="https://github.com/typicode/husky/assets/5502029/457ab087-e935-4196-b99f-601ecf37f263"
height="400px" alt="" />
</p>

#### TLDR;

Improved user experience and a (even) smaller package size while packing
in more features!

#### 👋 By the Way

**I'm available for remote work** (Front-end/Back-end mainly JS/TS but
open to other stacks Rails, Go, Elixir). You can contact me at my mail:
typicode at gmail 🙂

#### Introducing `husky init`

Adding husky to a project is now easier than ever. Although the
installation process was straightforward, it often required consulting
the documentation.

##### v8

```shell
npm pkg set scripts.prepare="husky install"
npm run prepare
npx husky add .husky/pre-commit "npm test"
```

##### v9

```shell
npx husky init
```

#### Adding a New Hook

Adding a hook is now as simple as creating a file. This can be
accomplished using your favorite editor, a script or a basic `echo`
command.

##### v8

```shell
npx husky add  .husky/pre-commit "npm test"
git add --chmod=+x .husky/pre-commit # On Windows
```

##### v9

```shell
echo "npm test" > .husky/pre-commit
```

#### Further Size Reduction

`v8` was already the most compact Git hooks manager at approximately
`6kB`.

`v9` takes this a step further, reducing the size to just `3kB`, likely
making it the smallest devDependency in your toolkit.

**To give you an idea of how small it is, the biggest file in the
project is the MIT license 😄**

#### More to Come

Additional features are in the pipeline for `v9`. Stay tuned
🙌

#### Other Changes

- **Enhanced security** with CI and npm `--provenance` for safer
publishing.
- Added **`$XDG_CONFIG_HOME`** support. Move `~/.huskyrc` to
`~/.config/husky/init.sh` for centralized configuration.
- **Fixed permission issue for Windows-created hooks**; they no longer
need to be executable.
- Removed `husky install`. Use `husky` or `husky some/dir` for the same
functionality (deprecation notice to be added).
- Modified behavior when `.git` is missing; it now triggers a warning
instead of failure.
-   Replaced `HUSKY_DEBUG=1` with `HUSKY=2` for debugging.
-   Updated the Husky API for module usage.
-   Transitioned to `ESM` for module usage.
-   Dropped support for Node 14 and 16.
-   Revamped docs.

#### How to Migrate

`v9` is backward compatible with `v8`, allowing you to freely upgrade
and migrate your hooks later.

`package.json`

```diff
{
  "scripts": {
-   "prepare": "husky install"
+   "prepare": "husky"
  }
}
```

`.husky/pre-commit`

```diff
- #!/usr/bin/env sh
- . "$(dirname -- "$0")/_/husky.sh"
npm test
```

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 7pm every weekday,before 5am
every weekday" in timezone Europe/Madrid, 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://developer.mend.io/github/Unleash/unleash).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xNzMuMCIsInVwZGF0ZWRJblZlciI6IjM3LjE3My4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-02-19 11:05:26 +01:00
Gastón Fournier
07e9429a7d
chore(security): bump IP dependency (#6265)
## About the changes
Bump IP package that fixes https://github.com/indutny/node-ip/issues/136
vulnerability
2024-02-19 10:54:40 +01:00
Jaanus Sellin
03929e3031
feat: project applications UI (#6260)
![image](https://github.com/Unleash/unleash/assets/964450/a1129857-820c-4e93-ac59-ef5f4743d774)
2024-02-19 09:50:53 +02:00
Thomas Heartman
bd907244c4
chore: don't hide columns in connected instances table (#6264)
Don't hide anything yet, so remove related code. Plus other code we
don't need has been removed.
2024-02-19 14:37:13 +08:00
Thomas Heartman
0e9102fb22
feat: add connected instances table (#6263)
This PR adds a first iteration of the connected instances table on a new
connected instances tab of the application page (hidden behind a flag).

As a first version, it only uses data that we currently return for each
application (so no "connected through" or "last synchronized").

It also uses the existing version of the application data and just
filters it for the "production" environment right now.

Adding query parameters (and potentially a new URL?) to the applications
page (to save state and fetch data) will be done in a follow-up. This
should lay the groundwork for adding a new API too.

<img width="1485" alt="image"
src="https://github.com/Unleash/unleash/assets/17786332/4fb68456-d0f5-4f82-9246-5333a273df9c">
2024-02-19 14:12:12 +08:00
Nuno Góis
5f781b4c8f
refactor: better prom metric helper types (#6261)
Improves typing in our Prometheus metric helpers.
2024-02-16 15:11:29 +00:00