Compare commits

..
420 Commits
Author SHA1 Message Date
Dharini 8e31adb9db fix: 🐛 release date (#2922) 2025-07-09 10:08:40 -07:00
Cameron Perera f0feb9e563 Icu 16439 enable session recording create storage bucket & index (#2886)
* test: 💍 update selectors for create-storage-bucket-test

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16439

* test: 💍 add selectors for enable session recording index test

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16439

* fix: 🐛 clean up duplicate test selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16439

* refactor: 💡 move single file use selectors back to file

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16439
2025-07-07 11:47:04 -05:00
Carlos Alcaide Corvo 44624e3820 Refactor test selectors for host-sets domain (#2911) 2025-07-07 09:17:06 -07:00
Zhihe Li 225c94b853 chore: 🤖 Allow DC E2E tests to run in ent (#2919) 2025-07-03 16:46:22 -04:00
Lisbet Alvarez bd1b8542eb fix: 🐛 transition aborted error when deleting or saving (#2918) 2025-07-02 13:06:17 -07:00
Dharini c92e93ab1c chore: 🤖 change log and cli version (#2917) 2025-07-02 10:29:12 -07:00
Lisbet Alvarez 1358727832 test: 💍 refactor target host sources test selectors (#2906)
* test: 💍 refactor target host sources test selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16435
2025-07-02 09:48:52 -07:00
dependabot[bot] 9bc84a2c59 chore(deps): bump stefanzweifel/git-auto-commit-action (#2915) 2025-07-01 12:27:49 -07:00
Katrina Schwark 7f00a83b19 Pci pr template v2 (#2914)
* Update pull_request_template.md

Adding PCI PR Template to existing checklist.

* Update pull_request_template.md

Removing whitespace
2025-06-30 15:07:15 -04:00
Lisbet Alvarez 19426cfd51 chore: resolve brace expansion to patched versions for vulnerability fix (#2912)
* chore: 🤖 resolve brace-expansion 1.1.11 to 1.1.12

* chore: 🤖 resolve brace-expansion 2.0.1 to 2.0.2
2025-06-27 14:39:01 -07:00
Lisbet Alvarez 30c05eb834 refactor: 💡 update label and description for AWS DHC (#2909)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17308
2025-06-27 14:17:06 -07:00
Lisbet Alvarez f1d334b848 chore: 🤖 upgrade got package to solve vulnerability (#2885)
* chore: 🤖 upgrade got package to solve vulnerability

* chore: 🤖 add missing ember try config in core addon

* chore: 🤖 add usePnpm to ember-try config file for all addons

* chore: 🤖 add resolution for package-json dep. instead of got
2025-06-27 13:58:38 -07:00
Carlos Alcaide Corvo 961f497b6b Replace this.server.db with this.server.schema (#2907) 2025-06-26 14:14:26 -07:00
Lisbet Alvarez 89f33f3714 refactor: 💡 add last seen time column to workers list view (#2908)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17305
2025-06-26 11:18:28 -07:00
Carlos Alcaide Corvo 4bad52f43a Refactor host set update test (#2902)
* Refactor host set update test
2025-06-25 08:28:14 -07:00
Carlos Alcaide Corvo fd6cd3ddf7 Refactor test selectors aliases (#2897)
* Refactor delete test selectors

* Refactor list test selectors
2025-06-25 07:39:10 -07:00
Lisbet Alvarez adf7f8603b test: 💍 refactor targets create alias & enable SR test selectors (#2904)
* test: 💍 refactor targets create alias & enable SR test selector

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16433
2025-06-24 16:09:33 -07:00
Lauren 2a2e4350ee conditionally render separator (#2900) 2025-06-23 20:07:41 -04:00
Carlos Alcaide Corvo f563a4ef45 Fix SASS deprecation (#2899) 2025-06-23 15:59:54 -07:00
hashicc 37b6ef6d3f Add e2e test for sorting (#2883)
* chore: 🤖 add sorting e2e test

* docs: ✏️ update docs with details around @ce and @ent tags

* test: 💍 Add @ent tag to sorting test

* test: 💍 update roles page with goto method

* test: 💍 assert column header labels and improve locators
2025-06-23 14:27:36 -04:00
Sohail 96ff0ddf27 Enhanced the refresh functionality in targets route (#2889)
* Enhanced the refresh functionality in targets and sessions route
2025-06-23 09:08:59 +05:30
Zhihe Li 746862a897 docs: ✏️ Fix E2E readme instruction (#2898) 2025-06-20 17:42:38 -04:00
hashicc 5d6e65f206 refactor: 💡 remove cached allSessions and related models (#2862) 2025-06-20 16:16:17 -04:00
Lisbet Alvarez 6f9a464302 chore: 🤖 upgrade hds to newest version 4.20.2 (#2895) 2025-06-20 11:39:04 -07:00
Carlos Alcaide Corvo abf7866292 Refactor scopes test selectors (#2888) 2025-06-20 10:32:28 -07:00
Lisbet Alvarez 10c98c66e7 test: 💍 Refactor test selectors for targets credential sources (#2890)
* test: 💍 Refactor test selectors for targets credential sources

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16432
2025-06-19 18:04:18 -07:00
Lisbet Alvarez c1f7fe2ddd chore: 🤖 revert hds from 4.19.0 to 4.18.2 (#2892) 2025-06-19 11:27:08 -07:00
hashicc 7f4586ed9e chore: 🤖 migrate away from component helper for form/account (#2880) 2025-06-18 10:09:28 -04:00
Carlos Alcaide Corvo 0b6049c8b0 Refactor authentication test selectors (#2887) 2025-06-17 11:51:04 -07:00
Lisbet Alvarez 2d347171a9 refactor: 💡 add title to primary column in auth-methods table (#2882) 2025-06-13 15:55:06 -07:00
Carlos Alcaide Corvo a085d4d4f7 Clean up commented mirage authentication route handler. (#2879) 2025-06-13 14:25:37 -07:00
Carlos Alcaide Corvo 7e2f3e3df3 Refactor credential-store/credentials list test selectors (#2884)
* Refactor credential-store/credentials list test selectors
2025-06-13 08:24:18 -07:00
Carlos Alcaide Corvo 3899daea7c Add sortNameWithIdFallback to auth methods (#2878)
* Add sortNameWithIdFallback to auth methods
2025-06-12 15:35:39 -07:00
Cameron Perera 3d1ee732b4 Icu 17232 improve host source resource fetching (#2877)
* refactor: 💡 add fallback value for address column

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232

* fix: 🐛 make host address optional in search for plugin hosts

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232

* feat: 🎸 remove pageSize reset for user preference

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232

* test: 💍 update e2e tests for host sources

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232

* feat: 🎸 improve host source resource fetching

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232

* refactor: 💡 remove em dash translation

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232

* refactor: 💡 add comment to target route for duplicate hosts

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232

* refactor: 💡 add filter to query for hosts

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232

* refactor: 💡 use Promise.all() when fetching hosts

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17232
2025-06-12 17:19:56 -05:00
Lisbet Alvarez 899d7beee0 chore: 🤖 upgrade @babel/runtime to v7.27 (#2881)
* chore: 🤖 upgrade @babel/runtime to v7.26
2025-06-12 10:17:12 -07:00
Carlos Alcaide Corvo 4c7f3fad75 Icu 15478 refactor credentials delete test selectors (#2867)
* Refactor credential-store/credentials update test selectors

* Refactor credential-store/credentials delete test selectors
2025-06-11 09:29:46 -07:00
hashicc b8eb2c3c9b Upgrade ember-cli-flash (#2870)
* chore: 🤖 upgrade ember-cli-flash to v6

* chore: 🤖 remove unneeded timer disabling

This is no longer needed since the test helpers as of v5 are explicit:
disableTimeout and enableTimeout

Old world:
> Essentially importing this helper would cause the init hook of the FlashObject to become a no-op and disable the timeout running in consuming apps test runs.

> To get the same behaviour as "Old world 🌐 " a consuming app needs only to remove the blueprint import. ✅

https://github.com/adopted-ember-addons/ember-cli-flash/pull/392

* chore: 🤖 add @embroider/macros for ember-cli-flash

ember-cli-flash requires @embroider/macros as a dev dependency:
https://github.com/adopted-ember-addons/ember-cli-flash/pull/392/files/6c5743f424d14143c9309bcb0be8152fdaec11a2#r1369522866
https://github.com/adopted-ember-addons/ember-cli-flash/pull/395
2025-06-10 18:37:36 -04:00
hashicc f5d612c8b5 chore: 🤖 use @nullvoxpopuli/ember-composable-helpers (#2869)
use @nullvoxpopuli/ember-composable-helpers instead of ember-composable-helpers
2025-06-10 18:05:30 -04:00
Carlos Alcaide Corvo 4020f2d4e2 Icu 15477 refactor credentials update test selectors (#2866)
* Refactor credential-store/credentials update test selectors
2025-06-10 14:19:23 -07:00
Carlos Alcaide Corvo 5794cfc7b2 Delete rose cards and rose card old styles (#2872) 2025-06-10 08:46:35 -07:00
Carlos Alcaide Corvo 1284a16978 Refactor credential-store/credentials read test selectors (#2864)
* Refactor credential-store/credentials read test selectors
2025-06-10 08:24:18 -07:00
f255a470cd Improve Project Navigation in Sidebar for Admin UI (#2829)
* When clicking on project in list, go to targets page

* Move Sessions link to bottom of main list on Project scope sidebar

* Add backlink to Orgs

* Add backlink to Global

* Fix some tests

* test: 💍 fix a couple more tests

---------

Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com>
Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2025-06-09 16:48:59 -07:00
hashicc f738e71657 chore: 🤖 explicitly require managing pnpm "built dependencies" (#2873)
pnpm by default refuses to run install scripts, some packages require
these and others are use install scripts as a way to provide messages.
Instead of a pnpm warning this commit ensures that the package that
is detected with an install script must be either listed in
ignoredBuiltDependencies or onlyBuiltDependencies. Running  pnpm
install will fail until a package has been categorized

As part of this commit the packages that were previously listed
as warnings have been categorized under ignoredBuiltDependencies
since their install scripts are not required for the functionality
of the package
2025-06-09 10:26:02 -04:00
hashicc beeee851ac fix: 🐛 import codemirror assets correctly (#2875)
Use addon.import to have the correct node_modules path used
2025-06-09 10:05:07 -04:00
Lisbet Alvarez eb365f0d39 Icu 17197 update logic in global roles to only add project scopes when using children (#2874)
* refactor: 💡 hide manage custom scopes button when using keyword

* refactor: 💡 update to only allow projects for global roles

* refactor: 💡 clean-up

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17197
2025-06-06 16:26:34 -07:00
Cameron Pereraandcameronperera 57e614e8db feat: 🎸 add search capability for host sources (#2861)
* feat: 🎸 add search capability for host sources

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17094

* refactor: 💡 use Rose::Pagination component

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17094

* refactor: 💡 move target detail body to index route

to fix whole page reload issue

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17094

* Add missing copyright headers

* refactor: 💡 PR feedback

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17094

---------

Co-authored-by: cameronperera <29386339+cameronperera@users.noreply.github.com>
2025-06-06 16:07:48 -05:00
Lisbet Alvarez 738fa1f15f refactor: 💡 add custom sort to resources (#2860)
* refactor: 💡 add custom sort

* test: 💍 fix tests

* test: 💍 fix more tests

* refactor: 💡 use reusable sort function for name

* refactor: 💡 use sort util in all resources w/ optional name

* Add missing copyright headers

* test: 💍 fix broken tests & add tests for new util

* refactor: 💡 add name custom sort to users

* test: 💍 fix import in tests

* refactor: 💡 add custom name sort to scopes

* test: 💍 pr feedback on util test cases

* refactor: 💡 move sort function into object (pr feedback)
2025-06-05 11:00:25 -07:00
Lisbet Alvarez 4c959ab297 refactor: 💡 hide manage custom scopes button when using keyword (#2865)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17195
2025-06-04 09:41:02 -07:00
Carlos Alcaide Corvo e685295d04 Icu 17166 implement sort for auth methods (#2855)
* Implement sorting for auth methods
2025-06-04 09:05:19 +02:00
hashicc 204bd10e04 ICU-16782 sort admin aliases (#2843)
* feat: 🎸 add sorting to aliases/index route

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16782

* refactor: 💡 use hds table components directly for aliases table

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16782

* feat: 🎸 wire up sorting with alias table, incl. query params

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16782

* test: 💍 add tests for sorting aliases

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16782

* fix: 🐛 use {{true}} instead of 'true' for @isVisuallyHidden

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16782
2025-06-03 13:55:11 -04:00
hashicc 5a302b0bcc Migrate to pnpm (#2828)
* chore: 🤖 remove packageManager field from package.json

* chore: 🤖 migrate yarn resolutions to pnpm overrides

* chore: 🤖 generate pnpm-lock.yml by using: pnpm import yarn.lock

* chore: 🤖 remove yarn.lock file

* chore: 🤖 migrate workspace configuration

* chore: 🤖 remove .yarn and .yarnrc.yml config

* chore: 🤖 update .copyright.hcl to ignore root pnpm files

* chore: 🤖 migrate husky pre-commit hook from yarn to pnpm

* chore: 🤖 migrate package.json scripts from yarn to pnpm

* chore: 🤖 update rose package.json & build to use explicit deps

* chore: 🤖 remove unused cp metadata.json command in pjson script

The cp metadata.json to dist was added in:
d19a251

The addons/rose/metadata.json no longer exists so it can't be copied

* chore: 🤖 migrate electron-app package.json scripts to pnpm

* chore: 🤖 create pnpm workspace for electron-app w/ hoisted deps

* chore: 🤖 migrate electron-app yarn lockfile to pnpm lockfile

Used "pnpm import yarn.lock"

* chore: 🤖 migrate electron-app overrides

node-gyp isn't needed since the fork is used via @electron/node-gyp
see: https://github.com/electron/node-gyp?tab=readme-ov-file#node-gyp---nodejs-native-addon-build-tool

* chore: 🤖 add trusted deps to be built to onlyBuiltDependencies

This is a pnpm feature that increases security. By defining these
dependencies they are being trusted to allow install hooks,
including postinstall. See:
https://pnpm.io/settings#onlybuiltdependencies

* chore: 🤖 add electron-app pnpm files to copyright header ignore

* chore: 🤖 remove yarn references from .*ignore files

* chore: 🤖 migrate --yarn to --pnpm for ember-cli-update.json

This isn't clearly documented but something that is supported
and can be found in other ember apps:
https://github.com/search?q=--pnpm+ember-cli-update.json&type=code

* chore: 🤖 migrate ci and related scripts to use pnpm

The cache is migrated to use the cache supported by
actions/setup-node@v4, an action we are already using. This is the
recommended way by pnpm:
https://pnpm.io/continuous-integration#github-actions

This commit also ensures that all github actions are using
consistent versions of actions/setup-node and pnpm/action-setup

* docs: ✏️ update documentation to use pnpm instead of yarn

* chore: 🤖 use explicit asciinema-player dependency

Because we override styles on asciinema-player we depend on their
styles. What might be a minor non-breaking change in their version could
(and did) break our style expectations in our overrides.

* chore: 🤖 run pnpm install and commit lockfile changes

* chore: 🤖 Remove ember-inflector from being overidden

https://github.com/hashicorp/boundary-ui/pull/2828#discussion_r2110380711

* chore: 🤖 remove highlight.js from pnpm overrides

https://github.com/hashicorp/boundary-ui/pull/2828#discussion_r2109847938

* chore: 🤖 remove additional unnecessary files from ignore files

* docs: ✏️ fix pnpm doc links

* chore: 🤖 use corepack to specify packageManager in package.json

* chore: 🤖 let pnpm action in ci use packageManager for version

https://github.com/pnpm/action-setup?tab=readme-ov-file#version

* docs: ✏️ fix broken pnpm website links
2025-06-03 12:55:12 -04:00
hashicc daa23f66c4 ICU-16785 sort admin scopes (#2842)
* feat: 🎸 add sorting to scopes/scope/scopes/index route

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16785

* refactor: 💡 use direct hds components to support sorting

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16785

* feat: 🎸 wire up sorting to the scopes table

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16785

* test: 💍 add tests for sorting scopes

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16785
2025-06-03 09:40:32 -04:00
Priya Patel b06c396086 Refactor - Rose::Page::Layout (#2849)
* Refactor: Rose::Page::Layout - header, actions and breadcrumbs (#2813)

* refactor: 💡 page::layout- header,breadcrumb and actions

* refactor: 💡 added new class for the page layout, fixed a11y

* refactor: 💡 addressed comments

* refactor: 💡 moved copy snippet to PH.Generic

* refactor: 💡 addressed comments

* Refactor: Rose::Page::Layout - header, actions and breadcrumbs Part 2 (#2825)

* refactor: 💡 rose page layout header

* refactor: 💡 removed extra classes

* Refactor: Rose::Page::Layout - header, actions and breadcrumbs Final Part (#2840)

* refactor: 💡 rose page layout header

* Refactor: Rose::Page::Layout - header, actions and breadcrumbs (#2813)

* refactor: 💡 page::layout- header,breadcrumb and actions

* refactor: 💡 added new class for the page layout, fixed a11y

* refactor: 💡 addressed comments

* refactor: 💡 moved copy snippet to PH.Generic

* refactor: 💡 addressed comments

* Refactor: Rose::Page::Layout - header, actions and breadcrumbs Part 2 (#2825)

* refactor: 💡 rose page layout header

* refactor: 💡 removed extra classes

* refactor: 💡 fixed a11y heading, actions dropdown

* refactor: 💡 fixed page header

* refactor: 💡 fix heading margin and failing tests

* refactor: 💡 add back margin for hds header tags

* refactor: 💡 fix style
2025-06-02 16:20:50 -05:00
Lauren 5555603a5c [Retire] Rose::Dropdown (#2858)
* remove dropdown styling

* remove rose/dropdown child component integration tests

* refactor tests, delete tests

* remove rose dropdown component from addons/

* refactor tests, delete tests

* run yarn format

* remove additional rose dropdown files from addons

* remove ref to rose dropdown from readme

* remove skipped test, comment states no longer relevant

* remove unused ref to rose-header-dropdown selector

* refactor tests using .rose-dropdown selector, cleanup

* run yarn format

* add selector to commonSelectors, refactor more tests

* nest .hds-dropdown selector in place of .rose-dropdown

* revert @use dropdpwn

* remove line, styling already applied on btn selector

* removed unused dropdown-radio-btn selector
2025-06-02 14:06:06 -04:00
hashicc 7c3b6d6d9e ICU-16787 sort admin users (#2844)
* feat: 🎸 add sorting to users route, feat. query params

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16787

* refactor: 💡 use hds components directly to support custom sort

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16787

* feat: 🎸 wire user sorting from controller to template

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16787

* test: 💍 add sorting tests for users

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16787
2025-06-02 13:26:11 -04:00
Carlos Alcaide Corvoandhashicc ce87d7728c Implement sorting for host catalogs (#2857)
Co-authored-by: hashicc <191911133+hashicc@users.noreply.github.com>
2025-05-30 16:14:00 -04:00
Carlos Alcaide Corvo e4da851172 Implement sorting for credential stores (#2856) 2025-05-30 15:36:43 -04:00
Cameron Perera e3433ec1f7 feat: 🎸 add pagination to host source table (#2854)
* feat: 🎸 add pagination to host source table

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17093

* test: 💍 add e2e tests for host source pagination

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17093

* refactor: 💡 change paginatedHosts to getter

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17093

* test: 💍 refactor e2e pagination test

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17093
2025-05-29 15:55:05 -05:00
hashicc 96f30d1b31 Add sorting to Groups in boundary admin (#2846)
* feat: 🎸 wire up sorting for groups/index route

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16783

* refactor: 💡 use underlying hds components directly for sorting

This step refactors the table to use the components directly.
With this setup a sorting refactor can be done more easily.

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16783

* feat: 🎸 wire up sorting from controller to template

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16783

* test: 💍 add sorting tests for groups table

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16783
2025-05-28 18:20:43 -04:00
hashicc f4a48467e3 Add sorting to Roles in boundary admin (#2827)
* feat: 🎸 add sorting to roles/index route

Add sortAttribute and sortDirection query params, and use values in
this.store.query sorting option

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16784

* refactor: 💡 use manual hds table components for custom sort

This refactor uses the underlying hds components directly in order to
support custom sorting, see:
https://helios.hashicorp.design/components/table/table?tab=code#custom-sorting-using-the-yielded-sorting-argumentsfunctions

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16784

* feat: 🎸 wire-up query param state, controller action with table

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16784

* test: 💍 add sorting tests for admin roles list

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16784
2025-05-28 10:40:31 -04:00
Lisbet Alvarez bada405511 Icu 17087 implement sort for sessions (#2845)
* feat: 🎸 implement sort for sessions

* test: 💍 fix bug + add tests

* Add missing copyright headers

* refactor: 💡 remove fix so it can be its own PR

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17087
2025-05-27 17:31:55 -07:00
Cameron Perera 96d7c055b0 Icu 17092 replace hosts connect modal with table in target detail page (#2841)
* feat: 🎸 add host source table to target detail view

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17092

* chore: 🤖 remove unused translation

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17092

* test: 💍 update e2e tests for host source change

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17092

* test: 💍 add test for target details main connect button

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17092

* test: 💍 update e2e test selector

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17092
2025-05-23 11:45:27 -05:00
dependabot[bot]andZhihe Li a747614a74 chore(deps): bump hashicorp/setup-terraform from 3.0.0 to 3.1.2 (#2853)
Bumps [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform) from 3.0.0 to 3.1.2.
- [Release notes](https://github.com/hashicorp/setup-terraform/releases)
- [Changelog](https://github.com/hashicorp/setup-terraform/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/setup-terraform/compare/a1502cd9e758c50496cc9ac5308c4843bcd56d36...b9cd54a3c349d3f38e8881555d616ced269862dd)

---
updated-dependencies:
- dependency-name: hashicorp/setup-terraform
  dependency-version: 3.1.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-05-23 10:53:03 -04:00
dependabot[bot]andZhihe Li 84856407ee chore(deps): bump stefanzweifel/git-auto-commit-action (#2852)
Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/stefanzweifel/git-auto-commit-action/releases)
- [Changelog](https://github.com/stefanzweifel/git-auto-commit-action/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stefanzweifel/git-auto-commit-action/compare/e348103e9026cc0eee72ae06630dbe30c8bf7a79...b863ae1933cb653a53c021fe36dbb774e1fb9403)

---
updated-dependencies:
- dependency-name: stefanzweifel/git-auto-commit-action
  dependency-version: 5.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-05-23 10:40:43 -04:00
dependabot[bot] 9bfd624713 chore(deps): bump actions/setup-node from 4.3.0 to 4.4.0 (#2851)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4.3.0 to 4.4.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/cdca7365b2dadb8aad0a33bc7601856ffabcc48e...49933ea5288caeca8642d1e84afbd3f7d6820020)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 4.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-23 10:22:03 -04:00
Jan Harrie b2a6e4d47f configure dependabot to automatically update GitHub Actions dependencies (#2848) 2025-05-23 15:03:29 +02:00
Lisbet Alvarez 308240be89 fix: 🐛 refocus on route changes when attempting to search (#2839)
* fix: 🐛 refocus on route changes when attempting to search

* refactor: 💡 update condition

* refactor: 💡 prevent refocus for more use cases like filtering

* refactor: 💡 use router service instead of window object

* refactor: 💡 PR feedback (use param finder instead of regex)

* test: 💍 update test title

* test: 💍 refactor tests to use test.each
2025-05-22 16:34:40 -07:00
Lisbet Alvarez c12edc7f73 feat: 🎸 implement sort for session recordings (#2837)
* feat: 🎸 implement sort for session recordings

* refactor: 💡 update selectors w/ pr feedback

* refactor: 💡 remove click in tests

* test: 💍 update selectors due to merge

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17065
2025-05-22 10:27:19 -07:00
Lisbet Alvarez 44bd5ee1c6 Icu 16786 implement sort for targets (#2830)
* feat: 🎸 add sorting for targets

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16786
2025-05-21 12:20:48 -07:00
Lauren 8f3cccce32 [Retire] Rose::Button (#2838)
* remove rose::button files and imports

* remove rose btn utilities

* remove btn class from app.scss

* delete rose btn styling, component files

* update test

* remove playground.hbs, team agreed

* refactor dummy/app/templates/index.hbs to use hds btn
2025-05-21 05:23:21 -04:00
Cameron Perera 1ef7d9b5a7 Icu 16413 roles principals (#2835)
* test: 💍 add selectors to roles principals

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16413

* test: 💍 add selectors for roles project scope

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16413

* change exists() to isVisible()
2025-05-20 17:08:08 -05:00
Dharini Jeeva c445f95aa4 chore: desktop header nav dropdown changes (#2833) 2025-05-20 13:24:46 -07:00
Cameron Perera 96db738f4b refactor: 💡 fix table density and remove desc margin (#2836) 2025-05-20 12:56:28 -05:00
Lauren 6181df4c69 [Replace][Desktop] Rose::Button (#2812)
* replace rose::button in ui/desktop

* replace .rose-button in ui/admin acceptance tests

* update @iconOnly to @isIconOnly

* add required @text arg for isIconOnly btns

* re-add title html element

* add _button.scss for custom styling

* add hover styling over close btn

* fix a bug when we hover in dark mode

* fix bug in main, hover white should trigger in dark mode

* remove &:not(:disabled) on btn close window class

* fix merge conflict

* fix styling
2025-05-20 12:15:45 -04:00
Priya Patel 376787fda1 refactor: 💡 rose dialog cleanup (#2831) 2025-05-20 09:40:57 -05:00
Cameron Perera 80ffa856bd fix: 🐛 fix host source description reference (#2834) 2025-05-19 09:35:26 -05:00
Cameron Perera eb9fe573b8 Icu 11937 foundation components retire rose typography styles (#2810)
* refactor: 💡 update _typography stylesheet

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11937

* refactor: 💡 update header margin styles into single rule

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11937

* refactor: 💡 add remove-header-margin class

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11937

* refactor: 💡 remove 'header' class

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11937

* test: 💍 fix failing tests for branded-card in desktop

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11937

* refactor: 💡 update style rule to use :where()

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11937

* refactor: 💡 rename remove-header-margin to remove-margin

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11937

* refactor: 💡 update style comment

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11937
2025-05-15 14:48:27 -05:00
Dharini Jeeva e222d5b909 chore: Migrate rose dropdown to HDS (#2826) 2025-05-15 11:05:05 -07:00
Lauren 1c774aa783 [Retire] Rose::Form::Label (#2815)
* remove rose::form::label integration test

* update label on fieldset element to ref .hds-form-label

* remove file _label.scss

* remove import

* delete components/rose/form/label/index.hbs

* remove styling from app.scss
2025-05-15 13:01:58 -04:00
Lisbet Alvarez 04b51da60f test: 💍 refactor targets test selectors (#2824)
* test: 💍 refactor targets test selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16427
2025-05-14 14:11:03 -07:00
Lauren 28ddec6898 [Retire] Rose::Form::Input (#2821)
* remove rose form input component folder

* remove component integration test

* remove _input styling and import ref

* remove import from addons

* remove app.scss form input styling

* replace form.input with Hds::Form::TextInput::Field

* remove assertions for disabled state, remove Hds replacement

* remove test that checks input field that no longer exists

* remove rose::form::input component from playgrouund.hbs

* remove @use 'input'
2025-05-14 09:21:18 -04:00
hashicc d987f844de Use @use for scss explicit imports (#2820) 2025-05-13 21:01:49 -04:00
Carlos Alcaide Corvo b0d26fe1e6 Add sorting foundation as util and using it within indexed-db-handler (#2773) 2025-05-13 16:18:04 -04:00
hashicc e96131a933 chore: 🤖 update @ember/test-helpers to 5.2.1 (#2797) 2025-05-13 13:23:24 -04:00
Sohailandsohail-hashicorp 3d58745bf1 feat: Clear flash messages during login (#2772)
* feat: Make the auth error message non-sticky in nature

---------

Co-authored-by: sohail-hashicorp <198640889+sohail-hashicorp@users.noreply.github.com>
2025-05-12 10:33:01 +05:30
Lisbet Alvarez 9560148253 chore: 🤖 update changelog with date (#2822) 2025-05-08 09:33:25 -07:00
Sohail ec00efb656 feat: 🎉 add minimum window size for the app (#2814) 2025-05-08 21:44:50 +05:30
Carlos Alcaide Corvo ba34307918 Add check to only show windows buttons on windows (#2817)
Default windows action buttons to true and return false only for mac
2025-05-08 14:05:19 +02:00
Carlos Alcaide Corvo 28d8afae2e Dedupe dependencies (#2819) 2025-05-08 12:40:54 +02:00
Michael Li 2e507be454 test(e2e): Address some Admin UI test issues for 0.19.2 (#2818)
* test(e2e): Update navigation to create a storage bucket

* test(e2e): Address flake when creating host catalogs
2025-05-06 14:07:36 -04:00
dillanb-hashi dbf3617224 test(ui): Test the scope picker on the top menu bar (#2788)
* test(ui): Test the scope picker on the top menu bar
* test(ui): Fixing based on recent menu bar changes
2025-05-06 09:39:48 -07:00
Lisbet Alvarez 200a7944e6 Icu 16545 upgrade ember addons api (#2791)
* v4.12.1...v5.12.0

* chore: 🤖 yarn.lock changes from ember upgrade

* chore: 🤖 ember init blueprint changes

* chore: 🤖 yarn.lock updates

* chore: 🤖 fix build errors

* chore: 🤖 yarn.lock file changes

* refactor: 💡 undo style path change

* chore: 🤖 fix build errors

* chore: 🤖 yarn.lock file changes

* test: 💍 add @ember/string back in to fix test error

* chore: 🤖 remove eslint prettier plugin

* chore: 🤖 remove prettier eslint plugin in api addon

* docs: ✏️ add comments back in
2025-05-06 08:49:29 -07:00
Lisbet Alvarez 8dafc2b9a0 test: 💍 refactor session-recording test selectors (#2811)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16423
2025-05-05 10:41:42 -07:00
Lisbet Alvarez b7559c1f4e Icu 16542 upgrade ember addons rose (#2784)
* v4.12.2...v5.12.0

* fix: 🐛 update path name for hds styles

* chore: 🤖 ember init changes

* style: 💄 clear lint errors

* chore: 🤖 run yarn format in rose addon

* chore: 🤖 fix build failures

* chore: 🤖 yarn.lock file changes

* chore: 🤖 yarn.lock file updates

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16542
2025-05-02 15:13:45 -07:00
Lauren dd8e1864db [Replace] Rose::Form::Label and <input.field> elements (#2783)
* replace with hds::form::label

* test Hds::Form::TextInput::Field

* add event handler

* add hds text componenet to grant.value fields

* fix test failures

* replace with set-from-event

* address feedback

* add title html element to hds component
2025-05-02 11:12:30 -04:00
Lauren d85a84980f [Retire] Rose::Icon (#2807)
* remove rose::icon test

* remove .rose-icon class styling from ui/admin

* remove .rose-icon class styling from ui/desktop

* remove .rose-icon class styling from addons/

* remove @import 'icon'

* remove icon.js
2025-05-02 10:53:21 -04:00
Priya Patel 4295966b7f Rose::Dialog::Cover component cleanup (#2806)
* refactor: 💡 rose::dialog::cover cleanup

* refactor: 💡 removed cover addon file
2025-05-01 16:14:53 -06:00
Lisbet Alvarez a87c079ade refactor: 💡 convert rose/anonymous from classic to glimmer comp (#2799) 2025-05-01 10:36:34 -07:00
Cameron Perera b3604e3e40 refactor: 💡 update code tag to use Hds::Text::Code (#2805)
* refactor: 💡 update code tag to use Hds::Text::Code

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16961

* refactor: 💡 remove explicit code tag attribute

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16961

* refactor: 💡 fix extra white space

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16961

* refactor: 💡 remove color from p span style for workers

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16961
2025-05-01 11:59:10 -05:00
hashicorp-tsccr[bot]andhashicorp-tsccr[bot] 6be8130329 Result of tsccr-helper -log-level=info gha update -latest .github/ (#2809)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
2025-05-01 09:15:31 +02:00
Lisbet Alvarez ca3972c04f fix: 🐛 polyfillUUID config for ember-data (#2808) 2025-04-30 16:54:59 -07:00
Lisbet Alvarez 4d98729cde chore: 🤖 update changelog and cli version (#2801)
* chore: 🤖 update changelog and cli version
2025-04-30 11:55:56 -07:00
Priya Patel 185af6f00e refactor: 💡 remove card component from desktop (#2798) 2025-04-29 17:28:59 -06:00
Lisbet Alvarez c5353d6e5e Icu 16547 upgrade ember desktop UI (#2796)
* v4.12.2...v5.12.0

* chore: 🤖 yarn.lock file changes

* chore: 🤖 ember init blueprint updates

* chore: 🤖 yarn.lock changes

* style: 💄 run linter and formatter

* chore: 🤖 yarn.lock file changes

* chore: 🤖 remove ember-cli-app-version

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16547
2025-04-29 15:32:50 -07:00
Lisbet Alvarez 20a05dc96a style: 💄 fix formatting for long credential names & description (#2804)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16869
2025-04-29 12:17:14 -07:00
Cameron Perera 30028b5ba0 refactor: 💡 convert p tags to Hds::Text component (#2800)
* refactor: 💡 convert p tags to Hds::Text component

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16865

* style: 💄 remove comment

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16865
2025-04-29 12:26:20 -05:00
Priya Patel 3bafb708ea refactor: 💡 update Rose::Frame to use Hds::Card::Container (#2795) 2025-04-29 09:15:17 -07:00
Cameron Perera 24d86a230a refactor: 💡 use Hds::Text::Code in place of pre tag (#2802)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16956
2025-04-29 09:24:24 -05:00
Lisbet Alvarez 620f822504 Icu 16546 upgrade ember for admin UI (#2793)
* v4.12.2...v5.12.0

* chore: 🤖 yarn.lock changes

* chore: 🤖 ember init blueprint changes

* chore: 🤖 yarn.lock file changes

* style: 💄 run linter and formatter

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16546
2025-04-25 14:39:59 -07:00
Priya Patel 93a57f26ee Replace Rose::Icon with HDS::Icon (#2762)
* refactor: 💡 rose icons with hds icons

* fix: 🐛 remove child selector for h2

* fix: 🐛 removed unwanted changes

* fix: 🐛 remove unncessary change

* refactor: 💡 rose icon for rose components

* fix: 🐛 default size for doc-link, updated tests, removed TODO

* fix: 🐛 update doc-link test
2025-04-25 13:18:23 -07:00
Cameron Perera 40ec4493ea fix: 🐛 credential library serializer for SSH certificate (#2790)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16880
2025-04-25 10:23:51 -05:00
hashicc de83d59bde Add additional indexeddb-handler tests (#2786) 2025-04-24 11:05:44 -04:00
Lisbet Alvarez a937c5e8de style: 💄 remove table borders from list-wrapper component (#2787) 2025-04-22 18:11:49 -07:00
Priya Patel b820bb19d7 Refactor: Hosts-sets test - delete, read and create (#2778)
* refactor: 💡 hosts-sets test refactor - delete,read,create

* fix: 🐛 updated test selectors
2025-04-22 14:16:15 -07:00
Lauren 36db2d3f1d Replace Rose::Button with Hds::Button (#2771)
* refactor btn

* refactor scope/workers/index.hbs

* refactor add-members, add-principals

* refactor btns, fix tests

* update json-secret-skeleton btn

* remove class from app.scss
2025-04-22 16:25:12 -04:00
Cameron Perera 5786b86521 refactor: 💡 update text span elements with Hds::Text::Body (#2779)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16864
2025-04-22 11:54:00 -05:00
Priya Patel c6a5f93b44 Replace Rose::Dialog::Cover with HDS::ApplicationState (#2770)
* refactor: 💡 rose dialog cover with hds application state

* fix: 🐛 i18n key

* fix: 🐛 addressed comments

* fix: 🐛 CSP issue for svg

* docs: ✏️ added CSP issue context
2025-04-18 12:42:18 -07:00
Carlos Alcaide Corvo 8814e2eacb Ember upgrade for addons/core (#2777) 2025-04-17 13:59:14 -07:00
Lisbet Alvarez 9b1e4a8291 Icu 16541 upgrade ember addons auth (#2776)
* v4.12.2...v5.12.0

* chore: 🤖 yarn.lock file changes

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16541

* chore: 🤖 run ember init to use updated blueprints as ref

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16541

* chore: 🤖 undo node change

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16541

* style: 💄 fix lint error

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16541

* fix: 🐛 undo deleted gitkeep file

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16541

* refactor: 💡 use workspace protocol for addons

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16541

* chore: 🤖 undo removal of stylistic

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16541
2025-04-17 11:36:46 -07:00
Priya Patel 01c2468f86 Refactor: Replace Rose::Dialog with HDS::Modal for desktop client (#2766)
* refactor: 💡 rose dialog to hds modal

* fix: 🐛 dark theme hds overlay

* fix: 🐛 dark mode hds modal shadow

* fix: 🐛 move dark mode modal override to a mixin

* fix: 🐛 update exists to isVisible
2025-04-17 10:57:45 -07:00
Cameron Perera af705718ff Reveal & Toolbar::Info Component cleanup (#2782)
* refactor: 💡 remove desktop Reveal component

* refactor: 💡 remove Toolbar::Info component
2025-04-17 10:11:14 -05:00
Carlos Alcaide Corvo e22ef12529 Chore icu 16553 deprecate a like array (#2767) 2025-04-15 09:29:01 -07:00
Carlos Alcaide Corvo 62510d9243 Chore icu 16553 deprecate a like array (#2767) 2025-04-15 09:13:55 -07:00
Carlos Alcaide Corvo 0fd25a6bb4 Delete electron-squirrel-startup from electron-app (#2774) 2025-04-15 08:22:35 -07:00
Cameron Perera a268a7b75e refactor: 💡 update all header tags to use HDS::Text::Display (#2765)
* refactor: 💡 update all header tags to use HDS::Text::Display

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16863

* refactor: 💡 update minor css changes for page header

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16863

* refactor: 💡 remove duplicate title and lint hbs files

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16863
2025-04-14 21:05:37 -05:00
3dded0a7bc Llb/side nav refactor (#2763)
* feat: 🎸 scope picker component (#2646)

* feat: 🎸 scope picker component
---------

Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 use hds side nav w/ hds frame instead of rose (#2688)

* refactor: 💡 use hds side nav w/ hds frame instead of rose

* test: 💍 clean up selectors

* fix: 🐛 specificity of style override

* refactor: 💡 use hds side nav list instead of target and portal

* refactor: 💡 revert to using portal component & update scss

* docs: ✏️ update comment

* refactor: 💡 use custom class names for containers

* refactor: 💡 pr feedback (use @hasSidebar arg)

* refactor: 💡 fix onboarding page & fix settings title

* refactor: 💡 remove unneeded template file (pr feedback)

* test: 💍 fix tests due to merge conflicts

* test: 💍 add missing test selector due to merge conflict

* test: 💍 fix more broken tests due to merge conflicts

* chore: 🤖 update yarn.lock & update hds version to 4.18.1

* chore: 🤖 fix e2e test cases due to side nav refactor (#2751)

* chore: 🤖 fix e2e test cases due to side nav refactor

* test: 💍 fix e2e test for desktop

---------

Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-04-14 14:27:02 -07:00
Lauren ab3140be0a refactor: 💅 Aliases: update-test (#2760)
* refactor aliases update-test

* refactor test

* address feedback
2025-04-14 12:09:22 -04:00
Sohail 0fcd58c080 feat: Conditionally display 'Check for Updates' menu item based on CLI type (#2754) 2025-04-10 07:58:23 -07:00
Carlos Alcaide Corvo 52f0d9f9e8 Update browserslist db (#2768) 2025-04-10 07:43:24 -07:00
hashicc 6585fa8e41 Add tests for indexed db handler (#2759) 2025-04-09 14:52:02 -04:00
Carlos Alcaide Corvo bef9b3b276 Refactor test selectors for credential-store/credentials create test (#2756) 2025-04-08 15:40:08 -07:00
Dharini Jeeva af411b854a chore: 🤖 include ipv6 support in mocks (#2764)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16862
2025-04-04 16:01:47 -07:00
Cameron Perera a697dba5b9 chore: 🤖 add test selectors to roles org-scope tests (#2761) 2025-04-04 13:33:41 -05:00
Carlos Alcaide Corvo 1203081ec7 Chore icu 15394 upgrade electron (#2753)
* Upgrade electron v35
2025-04-04 09:03:19 -07:00
Zhihe Li 2db63ae2f8 feat: 🎸 Populate subject for OIDC account name displays (#2757)
OIDC accounts are guaranteed to have a subject claim which we should
display. Currently we only look at email and full_name which
are all optional for OIDC claims. Also added deep links for accounts.

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16634
2025-04-03 13:33:08 -04:00
Lisbet AlvarezandCarlos Alcaide Corvo 9dd1617b57 chore: 🤖 upgrade ember-data to v5.3.11 (#2745)
* chore: 🤖 upgrade ember-data to v5.3.11

* Add missing copyright headers

* refactor: 💡 remove comment

* chore: 🤖 update yarn.lock due to merge conflict

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16544

* fix: 🐛 undo ember-source upgrade (should be upgraded w/ ember)

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16544

* chore: 🤖 move dep to devDeps & resolve test-helper version

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16544

* fix: 🐛 unique record id error bug fix using store.push

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16544

* refactor: 💡 cleanup

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16544

* Delete old deprecation initializer (#2748)

* refactor: 💡 import from'ember-data/store'

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16544

* refactor: 💡 clean up comments

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16544

* refactor: 💡 remove compatWith comment

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16544

---------

Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2025-04-03 09:32:44 -07:00
Zhihe Li 834058ff45 refactor: 💡 Batch writes to indexedDB (#2752)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16795
2025-04-01 14:04:31 -04:00
Cameron Perera 0f41a0a576 chore: 🤖 add test selectors to roles grants tests (#2749)
* chore: 🤖 add test selectors to roles list tests

* chore: 🤖 add test selectors for roles global-scope tests

* chore: 🤖 add TABLE_RESOURCE_LINK to global-scope tests

* test: 💍 change exists to isVisible

* chore: 🤖 add test selectors to roles grants tests

* refactor: 💡 create custom selector for grants tests

* refactor: 💡 use new FORM selector
2025-03-31 16:24:40 -05:00
Zhihe Li 1025cbfb87 refactor: 💡 Force requests in playwright to use controller addr (#2755) 2025-03-28 19:42:35 -04:00
Priya Patel ca3c1c7623 Refactor: Scopes tests (#2744)
* refactor: 💡 scopes test

* fix: 🐛 addressed comments

* fix: 🐛 replace exists with isVisible, use hasText

* fix: 🐛 move form to commonSelectors
2025-03-28 15:00:59 -07:00
Dharini Jeeva 69d127a89e chore: 🤖 remove rose::nav::breadcrumbs (#2750)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16790
2025-03-28 11:27:43 -07:00
Cameron Perera b4d9cd5bb7 Icu 16409 roles list & global-scope (#2747)
* chore: 🤖 add test selectors to roles list tests

* chore: 🤖 add test selectors for roles global-scope tests

* chore: 🤖 add TABLE_RESOURCE_LINK to global-scope tests

* test: 💍 change exists to isVisible
2025-03-28 13:11:33 -05:00
Carlos Alcaide Corvo 4b1327db24 Upgrade ember-electron from 4.2.2 to 6.0.0 (#2740)
* Upgrade to ember-electron 6
2025-03-27 09:08:12 -07:00
Priya Patel 2f2ceed24e Refactor: Workers test - Create-tags, list and tags (#2742)
* refactor: 💡 workers test - create-tags,list,tags

* fix: 🐛 addressed comment
2025-03-25 15:03:13 -07:00
Zhihe Li de0f20809d chore: 🤖 Fix git-cz usage for auto populating issues in hook (#2746)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16777
2025-03-25 13:23:31 -04:00
Dharini Jeeva b1f5857cac refactor: 💡 use test selector in host-catalog/list (#2743) 2025-03-24 14:50:09 -07:00
Cameron Perera ddbd1ca163 Icu 16406 roles read, update, delete (#2741)
* chore: 🤖 add test selectors to roles read tests

* chore: 🤖 add test selectors to roles update tests

* refactor: 💡 small test clean up

* chore: 🤖 add test selectors to roles delete tests
2025-03-21 15:34:17 -05:00
Carlos Alcaide Corvo 777e40fff8 Upgrade electron forge from 7.5.0 to 7.7.0 (#2739) 2025-03-21 11:27:04 -07:00
Priya Patel 68460331f5 Refactor: Worker tests - create, read, update and delete (#2737)
* refactor: 💡 workers test - create,delete,read,update

* fix: 🐛 address comments
2025-03-20 14:02:13 -07:00
Cameron Perera 32e9fe8b6a chore: 🤖 use test selectors for roles create tests (#2738) 2025-03-20 14:08:33 -05:00
Priya Patel b3a2460b3f Refactor: Policy tests - list and delete (#2736)
* fix: 🐛 policy test refactor - list, delete

* fix: 🐛 chain assertions

* fix: 🐛 fixed failing test
2025-03-18 15:03:53 -07:00
Dharini Jeeva 3260bf1b2a refactor: 💡 use test selector in host-catalog read, delete and update (#2734) 2025-03-18 12:06:39 -07:00
Priya Patel e69c6456d1 Refactor: Policy tests - create, read and update (#2732)
* refactor: 💡 policy tests: create, read and update

* fix: 🐛 use commonselector for table link
2025-03-18 10:47:46 -07:00
Zhihe Li f8b3792e62 Fix Searchbar debouncing in admin UI (#2735)
Applied ember-concurrency task usage to admin UI model hooks to help fix the debouncing issue.
2025-03-18 11:20:50 -04:00
Cameron Perera 01c34c0a79 Small test selector updates (#2733)
* refactor: 💡 update sidebar nav selector name

* refactor: 💡 move generic selector to common selector file
2025-03-17 11:07:21 -05:00
Priya Patel 825751239f Refactor: 💡 User acceptance tests: list, update and accounts (#2726)
* refactor: 💡 users selector tests: list, update and accounts

* fix: 🐛 follow AAA pattern

* refactor: 💡 updated common selectors
2025-03-14 16:04:56 -07:00
Dharini Jeeva 2465739060 Icu 15486 host catalogs create test (#2729) 2025-03-14 09:42:29 -07:00
Zhihe Li e6834d2033 chore: 🤖 Add chrome for self hosted runners when running tests (#2731) 2025-03-14 12:10:44 -04:00
Cameron Perera 924100df4c chore: 🤖 update session list tests with selectors (#2727)
* chore: 🤖 update session list tests with selectors

* chore: 🤖 add TABLE_ROW selector to session list
2025-03-14 10:32:44 -05:00
Zhihe Li 1ac7d1e08b feat: 🎸 Use repo vars to determine the runner size (#2724) 2025-03-14 11:15:53 -04:00
Zhihe Li 7becccd628 fix: 🐛 Fix search field race condition in DC targets (#2723)
* fix: 🐛 Fix search field race condition in DC targets
* feat: 🎸 Keep track of last search to know when to debounce

✅ Closes: ICU-14775
2025-03-13 18:50:33 -04:00
Dharini Jeeva dff5cac4fe refactor: 💡 worker filter feature flags (#2720) 2025-03-13 15:12:36 -07:00
Lisbet Alvarez ecd0c1de20 Icu 16535 refactor usage of did insert modifiers (#2722)
* refactor: 💡 remove ember-render-modifiers {{did-insert}} usage
2025-03-13 12:58:39 -07:00
Dharini Jeeva 878cb17b62 refactor: 💡 use test selector in groups/members route (#2719) 2025-03-13 09:51:37 -07:00
Carlos Alcaide Corvo 706981c231 Refactor test selectors within auth-methods oidc test (#2717)
* Refactor test selectors within auth-methods oidc test
2025-03-13 08:39:11 -07:00
Priya Patel d212cf7c40 Refactor: 💡 User acceptance tests - create, delete and read (#2718)
* refactor: 💡 user - create, delete and read tests

* fix: 🐛 removed 'this' usage, updated user create test
2025-03-12 16:49:38 -07:00
Carlos Alcaide Corvo 19b6e5154f Fix locationType deprecations. (#2721)
* Deprecated usage of locationType auto to history. Define locationType before setting configuration
2025-03-12 16:16:33 -07:00
Lisbet Alvarez 89263918ea Icu 16534 refactor usage of tracked using this args (#2711)
* refactor: 💡 remove tracked usage with this.args
2025-03-12 10:09:16 -07:00
Carlos Alcaide Corvo e8fc6d163b Deprecate import inject from @ember/service (#2716)
* Deprecate usage of import inject
2025-03-12 08:29:54 -07:00
Priya Patel 34a670f8d7 Refactor: Onboarding tests selectors refactor (#2715)
* refactor: 💡 Onboarding tests

Refactor test selectors for onboarding acceptance tests

✅ Closes: #ICU-16398, #ICU-16399

* fix: 🐛 failing test

* chore: 🤖 add copyright header

* fix: 🐛 use AAA pattern and server.schema

* fix: 🐛 moved done button to selectors

* fix: 🐛 renamed copy text btn selector
2025-03-11 14:53:32 -07:00
hashicc 6a46e2dd57 chore: 🤖 add chrome flags to keep from backgrounding (#2714)
There was an issue in tests where events fired in
Hds::FlyOut and Hds::Modal were not being dispatched.
These close events were depended on by test waiters
to know when the element was removed. In recent
versions of chrome, when ran headless and on macos,
these events were not firing. This meant the tests
waited indefinitely on developers local machines,
until the tests timed out. This issue was seen
across multiple macbooks and even on the hds repo.

This issue was *only* experienced in headless
chrome on recent macos.
It was **not** happening in:
* macos chrome headed locally
* linux chrome headless in CI

This made the issue only impact people running tests
locally, getting obscure timeouts. This issue is fixed
by the addition of this flag:
--disable-backgrounding-occluded-windows

The other flags added in this commit are not required
for the fix but should help keep a browser "active",
which was loosely what researching this bug hinted at
the cause of finding the issue fix.
2025-03-11 13:29:19 -04:00
Dharini Jeeva 5e0fa7c744 test: 💍 use test selectors for groups (#2713)
* test: 💍 use test selectors for groups
2025-03-10 13:32:32 -07:00
Zhihe LiandMichael Li 474ce17a13 Initial E2E DC setup (#2710)
* Initial setup

* refactor: 💡 Update dependency job

* refactor: 💡 Use boundary ent

* chore: 🤖 Cleanup workflow

* refactor: 💡 Adjust run condition

---------

Co-authored-by: Michael Li <michael.li@hashicorp.com>
2025-03-10 15:36:21 -04:00
Cameron Perera f00eed8633 test: 💍 fix false positive test (#2712) 2025-03-10 13:35:13 -05:00
Cameron Perera 42bcefa068 Icu 16393 managed groups read (#2709)
* chore: 🤖 update managed-groups read test selectors

* chore: 🤖 add test selectors to managed-groups delete

* chore: 🤖 use test selectors in managed-groups list tests

* chore: 🤖 refactor managed-groups members tests

* refactor: 💡 update selector name for DELETE action
2025-03-06 14:42:45 -06:00
Lisbet AlvarezandZhihe Li 29bde998ed refactor: 💡 remove usage of ember/runloop & ember-pollster (#2705)
* refactor: 💡 remove usage of ember/runloop & ember-pollster

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-03-06 12:20:48 -08:00
Michael LiandDharini Jeeva e29a83ec25 test(e2e): Enable Admin UI e2e tests to run against a local branch (#2700)
* test(e2e): decouple url used for browser vs cli

* test(e2e): Add instructions for using the UI of a local branch

* CR

* Fix typo in e2e-tests/README.md

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>

---------

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2025-03-05 11:38:12 -05:00
Zhihe Li ddfcbde7d4 chore: 🤖 audit security alerts (#2707)
* chore: 🤖 Update solid-js to resolve security alert

* chore: 🤖 Update path-to-regexp package for security alert

* chore: 🤖 Update nanoid to resolve security alert
2025-03-05 11:16:45 -05:00
Cameron Perera 42e31d3ece Icu 16392 managed groups create (#2704)
* chore: 🤖 update manage-gropus tests to ues selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16392

* refactor: 💡 small clean up
2025-03-04 15:09:08 -06:00
Michael Li cd8480bc67 test(e2e): Add check for credential store worker filters (#2696) 2025-03-04 14:43:01 -05:00
Carlos Alcaide Corvo 06dc05be08 Update CLI version to 0.19.1 and update changelog (#2706) 2025-03-04 11:09:19 -08:00
Zhihe Li d3fda81af3 fix: 🐛 Fix race condition in browser window loading (#2701) 2025-03-04 11:50:19 -05:00
Carlos Alcaide Corvo f58d345b63 Refactor unnecessary curly parenthese (#2699)
* Refactor unnecessary curly parentheses
2025-03-03 09:42:38 -08:00
Cameron Perera f35382a4e0 refactor: 💡 update adapter when transforming filter error (#2702)
* refactor: 💡 update adapter when transforming filter error

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16580

* style: 💄 add comment about adapter changes for translated field

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16580

* style: 💄 move comment to adapter

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16580

* style: 💄 update old comment about model fragments

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16580

* refactor: 💡 use extractErrors in serializers

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16580
2025-03-03 09:58:45 -06:00
Dharini Jeeva 8087430dd2 chore: upgrade to yarn 4 (#2697) 2025-02-28 14:19:35 -08:00
Zhihe Li 2a5f1f3668 fix: 🐛 Fix development build for desktop client (#2703) 2025-02-28 10:10:40 -05:00
Carlos Alcaide Corvo a889cb30e0 Upgrade electron-forge to 7.5.0 (#2526)
* Upgrade electron-forge to 7.5.0. Delete lodash path for electron-app, its not need anymore
2025-02-26 17:59:35 -08:00
dependabot[bot]andLisbet Alvarez e411c0ab7b chore(deps): bump solid-js from 1.7.6 to 1.9.5 (#2698)
Bumps [solid-js](https://github.com/solidjs/solid) from 1.7.6 to 1.9.5.
- [Release notes](https://github.com/solidjs/solid/releases)
- [Changelog](https://github.com/solidjs/solid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/solidjs/solid/compare/v1.7.6...v1.9.5)

---
updated-dependencies:
- dependency-name: solid-js
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2025-02-26 17:10:08 -08:00
Lauren a136371c1f refactor: 💅 Aliases: create-test (#2685)
* refactor: 💡 Create aliases test suite

Refactor test suite for creating aliases

✅ Closes: ICU-15454

* use FIELD_TEXT_ERROR selector

* revert SAVE_BTN

* revert auth-method changes

* revert scopes changes

* revert scopes changes

* revert targets changes

* add FIELD prefix to const

* remove selector suffix

* revert read-test

* remove FIELD_TEXT_ERROR

* add data-test att to component

* fix merge conflict
2025-02-25 14:17:45 -05:00
Lauren 83fa213854 refactor: 💅 Aliases: read-test (#2691)
* refactor: 💡 Read aliases test suite

Refactor tests for read aliases test suite

✅ Closes: ICU-15455

* replace with alert toast body, replace with this.server.schema

* revert change

* revert oidc test

* revert roles, create-test

* add const to commonSelectors file, revert selectors file

* rename selector

* use TABLE_RESOURCE_LINK common selector

* fix test failure
2025-02-25 13:16:41 -05:00
Cameron Perera 750cc1ecae feat: 🎸 add logging to notifyError decorator (#2694)
* feat: 🎸 add logging to notifyError decorator

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16334

* refactor: 💡 update reference to global electronLog

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16334

* refactor: 💡 update __electronLog global references

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16334

* refactor: 💡 add log to other cluster URL actions

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16334

* refactor: 💡 update how we trigger electron log in notifyError

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16334

* refactor: 💡 minor log change

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16334
2025-02-21 10:01:48 -06:00
Cameron Perera e25a854d24 docs: ✏️ update bug report template (#2695)
* docs: ✏️ update bug report template

* docs: ✏️ update debug log info

* docs: ✏️ small comment changes

* docs: ✏️ add arch and os version examples

* docs: ✏️ change App Version to Desktop Client Version

* docs: ✏️ small change

* docs: ✏️ another small change to bug template
2025-02-20 09:20:31 -06:00
Zhihe Li 3b32195271 feat: 🎸 Use OCR for E2E tests when comparing terminal (#2639)
* feat: 🎸 add OCR to interpret terminal
2025-02-19 13:21:33 -05:00
Michael Li f9411794c4 test(e2e): Remove attempt to delete session recording due to UI change (#2687)
This test attempted to delete a session recording when the policy did not allow it. However, there was a UI change to remove that option entirely, so we are removing the check.
2025-02-14 11:10:53 -05:00
hashicc c5fdbfd62d chore: fix eslint-related issues (#2690)
* chore: 🤖 add .eslintignore for e2e-tests directory

* chore: 🤖 add auto-fixable eslint changes

* chore: 🤖 make js tasks more explicit to avoid race conditions

avoid having js files be in two separate concurrent branches where tasks
could result in race-condition writes

* chore: 🤖 expand .eslintignore to include more generated dirs

* chore: 🤖 fix additional lint-staged tasks

Fix additional lint-staged tasks that could result in race conditions
2025-02-13 17:09:10 -05:00
Lauren f12ae90aba refactor: 💅 Use common selector ALERT_TOAST_BODY across test suite (#2692)
* replace with alert toast body, replace with this.server.schema

* revert changes to db,schema

* use common selector, alert toast body

* replace ERROR_MSG_SELECTOR with common selector ALERT_TOAST_BODY
2025-02-13 15:54:40 -05:00
Zhihe Li 20c4bbcee2 feat: 🎸 Add migration check to delete index DB when updating (#2241)
* feat: 🎸 Add migration check to delete index DB when updating

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-13223
2025-02-13 11:00:19 -05:00
Michael Li f3232f34c2 test(e2e): Use new tags syntax (#2686)
* test(e2e): Use new tag syntax

* chore: Update yarn lock
2025-02-12 17:24:51 -05:00
hashiccandMichael Li 8fedb23399 update e2e docs with supported enos scenarios (#2678)
* docs: ✏️ update e2e docs with supported enos scenarios

* Update grammatical typo in e2e-tests/README.md

Co-authored-by: Michael Li <michael.li@hashicorp.com>

---------

Co-authored-by: Michael Li <michael.li@hashicorp.com>
2025-02-12 17:08:48 -05:00
hashicc 4ca519ce62 chore: add eslint-plugin-playwright rules for e2e tests and fix errors (#2680)
* chore: 🤖 add eslint-plugin-playwright

* chore: 🤖 add recommended eslint rules for playwright to config

* test: 💍 remove describe blocks with async functions

* fix errors related to playwright/valid-describe-callback rule

* test: 💍 fix all auto-fixable playwright rules tests
2025-02-12 12:39:16 -05:00
hashicc 6d4768272a test: 💍 update e2e tests with afterEach cleanup (#2677) 2025-02-12 10:16:44 -05:00
Lauren e8cc22879f [ICU-15403] Trim whitespace on storage buckets and host sets json attrs serializers (#2636)
* trim whitespace on json attrs in storage bucket serializer

* add test for storage bucket serializer

* move trimWhitespace check to application level

* add trimWhitespace to preferred_endpoints attr

* add conditional for string arr

* trim whitespace on str arr

* add check for null val

* refactor, move logic

* relocate comment

* add unit test for application serializer
2025-02-11 18:31:01 -05:00
Zhihe Li b287683a61 chore: 🤖 Upgrade cross-spawn versions to resolve security alert (#2684) 2025-02-11 17:41:47 -05:00
dependabot[bot] ea43ee99d6 chore(deps): bump serialize-javascript from 6.0.1 to 6.0.2 (#2683)
Bumps [serialize-javascript](https://github.com/yahoo/serialize-javascript) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/yahoo/serialize-javascript/releases)
- [Commits](https://github.com/yahoo/serialize-javascript/compare/v6.0.1...v6.0.2)

---
updated-dependencies:
- dependency-name: serialize-javascript
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-11 12:01:20 -05:00
Carlos Alcaide Corvo 48db68e7ac Upgrade node engines to work with node 20 and 22 (#2486)
* Upgrade node engines to work with node 20 and 22
2025-02-10 17:37:04 -08:00
Cameron Perera 7807b7a280 Icu 15471 credential store tests (#2663)
* test: 💍 update cred store read tests to use selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15471

* test: 💍 update cred store update to use selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15471

* test: 💍 update cred store delete to use selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15471

* test: 💍 update cred store list to use selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15471

* chore: 🤖 remove refactored selector

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15471
2025-02-10 17:41:37 -06:00
Cameron Perera ad0e223742 chore: 🤖 update desktop release date in CHANGELOG (#2682) 2025-02-07 16:56:17 -06:00
Lisbet Alvarez c9a74f2800 fix: 🐛 reapply storage policy errors out after a failed delete (#2674)
* fix: 🐛 reapply storage policy errors out after a failed delete

* refactor: 💡 hide delete button when policy is retain forever

* refactor: 💡 pr feedback (move check to model)
2025-02-04 14:09:10 -08:00
hashicorp-tsccr[bot]andhashicorp-tsccr[bot] 570ed61edb Result of tsccr-helper -log-level=info gha update -latest .github/ (#2675)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
2025-02-04 13:55:48 -08:00
Dharini Jeeva 835b302c19 chore: add more test cases to credential display e2e test (#2673)
* chore: 🤖 add more test cases
2025-01-31 14:47:03 -08:00
Carlos Alcaide Corvo a0fad9874a Refactor auth-method delete test selectors (#2671) 2025-01-31 08:27:06 -08:00
Cameron Perera cb895024e0 fix: 🐛 update hidden secrets and flatten-nested-object logic (#2672) 2025-01-30 18:00:26 -06:00
Cameron Perera 2e94ebdb64 chore: 🤖 update cli version and CHANGELOG (#2670)
* chore: 🤖 update cli version and CHANGELOG

* chore: 🤖 fix dc release date in CHANGELOG
2025-01-29 12:06:27 -06:00
Cameron Perera ae1e6d2748 feat: 🎸 add showFilterGenerator to WorkerFilterGenerator comp (#2669)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16282
2025-01-28 16:24:38 -08:00
Laurenandcameronperera c72d4f35a0 Vault cred store filter create (#2668)
* refactor: 💡 add worker filter back to create form

✅ Closes: ICU-16281

* add helper text to worker filter generator at creation state

* set isOptional to true

* set isOptional to true

---------

Co-authored-by: cameronperera <cameron.perera@hashicorp.com>
2025-01-28 16:46:11 -05:00
Michael Li 9742d824c4 test(e2e/desktop): Address failures in session tests (#2664)
* test(e2e): Address failures in session tests

* CR
2025-01-28 11:04:46 -05:00
Lisbet Alvarez 639aa47e19 refactor: 💡 Update text for fields in AWS & GCP host catalogs (#2667) 2025-01-27 15:36:30 -08:00
Michael Li 5fa0d11aa9 test(e2e/admin): Updates for 0.19.0 (#2665)
* test(e2e): Update "Inactive" locators

* test(e2e): Update worker filter locators

* test(e2e): Address flake

Ensure that the test has reached the org page before trying to click the Auth Methods link (there is an auth method link on both the global page and the org page).
2025-01-27 10:01:44 -05:00
Dharini Jeeva fed32aa57b chore: 🤖 add doc links for GCP plugin (#2666) 2025-01-24 12:45:56 -08:00
Carlos Alcaide Corvo 1e2134bd7e Refactor auth methods red test selectors (#2656)
* Refactor auth-methods list acceptance test selectors
2025-01-24 12:11:19 -08:00
Dharini Jeeva 064375d457 test: 💍 add e2e tests for credentials display in desktop (#2660)
* test: 💍 add e2e tests for credentials display in desktop
2025-01-23 14:30:54 -08:00
Dharini Jeeva deff38de56 fix: 🐛 include GCP plugin text (#2662)
* fix: 🐛 include GCP plugin text
2025-01-23 13:34:33 -08:00
Carlos Alcaide Corvo 15950d3a09 fix: 🐛 Fix HDS deprecation message (#2661)
Fix HDS deprecation message for HDS Dropdown interactive component using
@text rather than yielding it.
2025-01-23 08:15:12 -08:00
Carlos Alcaide Corvo c4539b8e30 Refactor auth-methods list acceptance test selectors (#2654)
Refactor auth-methods list acceptance test selectors
2025-01-22 14:32:16 -08:00
Carlos Alcaide Corvo 904864b14e Test icu 15459 auth method create test selectors refactor (#2653)
Refactor selectors
2025-01-20 09:45:15 -08:00
Zhihe Li 390d179917 feat: 🎸 Added GCP host sets and hosts (#2655)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15994
2025-01-10 14:18:48 -08:00
Dharini Jeeva 3b6a421af2 chore: Updates to gcp hc form (#2649)
* chore: 🤖 add worker_filter field, updates to helper text
2025-01-10 14:18:48 -08:00
Dharini Jeeva cc8d4fe952 test: GCP plugin acceptance tests (#2648) 2025-01-10 14:18:48 -08:00
Dharini Jeeva dfa62dd04b chore: 🤖 gcp plugin creation in the UI (#2645)
gcp plugin creation and mirage changes
2025-01-10 14:18:48 -08:00
Dharini Jeeva 520020f2c6 Chore: refactor host catalog model and serializer to accommodate GCP plugin (#2627)
* chore: 🤖 GCP plugin support
2025-01-10 14:18:48 -08:00
hashiccandhashicc 31f1ed8dd4 test(e2e): add e2e test for scope chooser with filtered targets (#2644)
* test(e2e): add e2e test for scope chooser with filtered targets

Closes: https://hashicorp.atlassian.net/browse/ICU-16121

* Add missing copyright headers

* chore(e2e): use prettier on scope.spec.js

* refactor(e2e): use explicit checks for scope in summary

* refactor(e2e): move test hooks and associated variables to top-level

Move beforeEach and afterEach and the associated variables setup in
hooks to top-level within scope.spec.js. This matches the patterns
used in other tests.

* refactor(e2e): use simpler scoped locator for summary element within header-nav

---------

Co-authored-by: hashicc <hashicc@users.noreply.github.com>
2025-01-10 17:00:49 -05:00
Cameron Perera 5abd4f1f4f Icu 15470 credential store create test (#2650)
* refactor: 💡 clean up urls in create test file

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15470

* test: 💍 update cred store create to use selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15470
2025-01-10 09:57:32 -06:00
Lisbet Alvarez 862ce645cf fix: 🐛 hds dialog text wrong color when system mode is dark (#2651) 2025-01-09 15:30:06 -08:00
Lisbet Alvarez 9eccbb91db refactor: 💡 Update name radio option label & set toggle default to on (#2652)
* refactor: 💡 Update name radio option label & default toggle on
2025-01-09 15:18:17 -08:00
Carlos Alcaide Corvo 343e1d2193 test: 💍 Refactor host list test selectors (#2629)
* test: 💍 Refactor host list test selectors
2025-01-08 09:14:29 -08:00
Zhihe Li 9a11925216 docs: ✏️ Update readme docs for e2e tests (#2647) 2025-01-07 17:28:28 -05:00
Lisbet Alvarez f7f1041daa fix: 🐛 oidc retry not working for secure links in desktop ui (#2641)
* fix: 🐛 oidc retry not working for secure links in desktop ui
2025-01-07 10:56:32 -08:00
Michael Li 1cbf3b227e test(e2e): Add additional assertions to UI tests (#2634)
* test(e2e): Address deprecation

* test(e2e): Add additional connection assertions on tests

* CR: Fix flake when waiting for sessions

If no sessions are available and the page needs to reload, we should wait to ensure that the page has loaded before checking what the state of the sessions are

* CR: Address flake in connect methods

Noticed an issue where a session recording was not playable. The theory is that the session didn't last long enough before it was cancelled. This adds a 2 second wait after establishing a connection before continuing.

* CR: Use authenticated state by default

* CR: Update dynamic host catalog assertion

* CR: Simplify host set checks

- Use .all() when looping
- Add check to see if we need to reload the page or not

* CR: Be more specific with locator

Ran into a conflict with the Static/Dynamic host catalog type and the Static/Dynamic credential type.

* CR: Update connection methods to be more resilient

Rather than using a hardcoded sleep, we will now run a command on the target and wait for a specific string to return before continuing.

* CR
2025-01-06 11:40:32 -05:00
Lisbet Alvarez faf4ecfac6 Fix memory leak issue when using fetch in oidc authentication (#2640)
* test: 💍 test 1

* chore: 🤖 remove waitForPromise use

* chore: 🤖 remove all other waitforpromise usage

* test: 💍 turn down polling

* test: 💍 use .json

* refactor: 💡 add waitForPromise back in & consume response body

* test: 💍 some testing

* test: 💍 more testing

* refactor: 💡 clean-up a bit

* refactor: 💡 use head method request & clean up comments

* refactor: 💡 use get method & consume response body

* test: 💍 fix token validation test cases
2025-01-03 14:06:27 -08:00
Michael Li ca4aad0a2b test(e2e): Add Admin UI test for OIDC auth method (#2638)
* test(e2e): Add managed group check in LDAP test

* test(e2e): Add oidc test

* CR: Suppress warning

* CR: Use toHaveText
2025-01-03 14:19:33 -05:00
hashicorp-tsccr[bot]andhashicorp-tsccr[bot] ed569306bb Result of tsccr-helper -log-level=info gha update -latest .github/ (#2642)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
2025-01-02 09:41:32 -08:00
Lisbet Alvarez 65abd7a4e3 fix: 🐛 code block error in console when value is empty on save (#2637) 2024-12-20 14:03:35 -08:00
Lauren 422cff4547 [ICU-15647] Replace Rose::Dialog with Hds::Modal in admin ui only (#2623)
* sort list

* refactor: 💡 Replace Rose::Dialog with Hds::Modal

✅ Closes: ICU-15647

* refactor targets-host-sources-test

* refactor update-test

* update test selectors

* refactor delete test

* refactor org scope test

* refactor delete scope and auth-method tests

* refactor update host catalogs tests

* refactor credential-stores credential update tests

* refactor credential-stores credentials delete tests

* refactor scopes update tests

* refactor storage buckets delete test

* refactor storage buckets delete test

* refactor credential library update test

* refactor targest workers test

* refactor workers create tags test

* refactor global scope test

* refactor users update test

* refactor host catalogs delete test

* refactor credential-store update tests

* refactor host catalogs, hosts and sets update tests

* remove unused vars

* rename selectors, remove attrs

* add @onDismiss callback
2024-12-20 14:16:43 -05:00
Lisbet Alvarez 7695135302 refactor: 💡 application state ability dependent descriptions (#2631)
* refactor: 💡 application state ability dependent descriptions

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15813
2024-12-17 16:03:56 -08:00
Cameron Perera 5be4868e9a refactor: 💡 rename arialabel to aria-labelledby for key/value (#2633)
* refactor: 💡 rename arialabel to aria-labelledby for key/value

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15701

* refactor: 💡 rename ariaLabelledBy to naming conventions

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15701
2024-12-17 13:58:04 -06:00
Cameron Perera fce97fd57a fix: 🐛 change disabled to readonly for form inputs (#2618)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15666
2024-12-17 13:31:47 -06:00
Michael Li af8655ec45 test(e2e): Refactor imports for boundary cli helper methods (#2632)
* test(e2e): Update imports to match boundary-http conventions

* test(e2e): Remove cli from method name
2024-12-17 10:17:32 -05:00
Cameron Perera daed714b98 test: 💍 update selectors for credential-library tests (#2630)
delete and list

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15468
2024-12-16 16:31:07 -06:00
Carlos Alcaide Corvo 584e62cff3 test: 💍 Refactor host delete test selectors (#2626)
Refactor host-catalog host delete acceptance test selectors
2024-12-13 15:57:10 -08:00
Lisbet Alvarez 6d2f1dcbbf Cleanup worker filter translations (#2621)
* refactor: 💡 clean-up worker filter translations
2024-12-12 16:06:38 -08:00
Cameron Perera 5e7b74a7ed test: 💍 use selectors in update credential-libraries (#2624)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15467
2024-12-12 12:26:52 -06:00
Dharini Jeeva 6de20b03ef chore: handle nested data from static json credentials (#2611) 2024-12-11 15:08:51 -08:00
2869020e65 Llb/worker filter improvements (#2614)
* test: 💍 clean up worker filter component tests (#2559)

* Icu 15741 add show filter generator toggle to worker filter component (#2562)

* feat: 🎸 add filter generator to worker filter component

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15741

* feat: 🎸 show add worker filter when none set for targets (#2564)

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15760

* Icu 15743 tag workflow (#2565)

* feat: 🎸 add tag generator workflow

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743

* test: 💍 add test cases

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743

* refactor: 💡 update selected type name to selectedGeneratorType

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743

* Apply suggestions from code review

minor translation change

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>

* refactor: 💡 update id for generated-value

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15743

---------

Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com>
Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>

* Icu 15744 name workflow (#2566)

* feat: 🎸 add name workflow

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744

* test: 💍 add "name" workflow tests for filter generator

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744

* refactor: 💡 use const test selectors for filter generator

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744

* refactor: 💡 add default option

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744

* docs: ✏️ fix comment

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15744

---------

Co-authored-by: cameronperera <cameron.perera@hashicorp.com>

* refactor: 💡 move worker filter generator outside of rose::form (#2574)

* refactor: 💡 move worker filter generator outside of rose::form

* [ICU-15718] Add worker filter route, template for empty state (#2576)

* feat: 🎸 Vault Credential Store Worker Filter

The Worker Filters tab will display the associated worker filter and
have an empty state for when there is no worker filter assigned.

* add template

* Add missing copyright headers

* update styling, remove Rose component

* color primary is already default, remove

* add rose component, remove custom css

* fix test

* singularize lang

---------

Co-authored-by: laurenolivia <laurenolivia@users.noreply.github.com>

* feat: 🎸 update worker filter field to use code editor (#2578)

* feat: 🎸 update worker filter field to use code editor

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15737

* test: 💍 fix failing storage bucket tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15737

* test: 💍 update tests for new worker filter field (#2580)

* test: 💍 update tests for new worker filter field

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15739

* Update ui/admin/tests/acceptance/storage-buckets/update-test.js

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>

---------

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>

* [ICU-15719] Create edit worker filter route and template (#2582)

* add codeblock to template

* add cancel btn fn

* add controller test

* add save fn

* display formatted worker filter text inside codeblock

* move codeblock component outside rose::layout::centered

* remove console.log

* remove router.refresh() and refactor translations yaml

* refactor translations, add breadcrumb::item

* replace html elements with hds

* move component, delete file

* [ICU-15720] Add edit worker filter action to manage dropdown (#2593)

* add acceptance test file

* delete test file

* add edit option to manage dropdown

* update route in dropdown

* add check for model isVault

* add acceptance test file

* delete test file

* remove data test selectors, fix syntax

* [ICU-15721] Remove worker filter input field (#2596)

* remove worker filter input field from vault credential store form

* revert yaml

* [ICU-15838] Add vault credential store worker filter tests (#2595)

* add data test elements

* add subtests to update-test.js

* add subtext to check for .hasText()

* add subtest when worker filter exists

* update subtest name

* remove console.log

* clean up

* add new selectors

* refactor: 💡 worker filter clean-up (#2592)

* refactor: 💡 worker filter clean-up

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816

* refactor: 💡 add aria labels & missing can save check

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816

* refactor: 💡 pr feedback of using uuid

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816

* Add missing copyright headers

* refactor: 💡 use unique-id helper for aria labels (pr feedback)

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15816

---------

Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com>

* refactor: 💡 update icon logic for egress worker filter (#2612)

* refactor: 💡 update worker_filter help translation

* refactor: 💡 add maxHeight to worker filter code blocks

* refactor: 💡 use existing default option for dropdowns

* refactor: 💡 hide copy button when no result to copy

and remove unused styles

---------

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com>
Co-authored-by: Lauren <lauren.burwell@hashicorp.com>
Co-authored-by: laurenolivia <laurenolivia@users.noreply.github.com>
Co-authored-by: lisbet-alvarez <lisbet-alvarez@users.noreply.github.com>
2024-12-11 14:00:27 -06:00
Carlos Alcaide Corvo 40c8ceeca6 Change validation field from name (optional) to address (required) (#2619) 2024-12-11 08:04:45 -08:00
Lisbet Alvarez 0623d4ad47 Fix e2e test page selectors due to hds refactor (#2610)
* chore: 🤖 fix e2e broken tests due to hds refactor

* chore: 🤖 remove unneeded change & fix another selector

* chore: 🤖 upgrade playwright

* chore: 🤖 remove unneeded dependency in desktop ui
2024-12-10 16:24:25 -08:00
dependabot[bot]andZhihe Li 0b9c235dd2 chore(deps-dev): bump nanoid from 5.0.8 to 5.0.9 (#2620)
Bumps [nanoid](https://github.com/ai/nanoid) from 5.0.8 to 5.0.9.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/5.0.8...5.0.9)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2024-12-10 16:53:38 -05:00
Zhihe Li e16b4e68c8 Icu 14778 add more sessions tests (#2615)
* test: 💍 Add desktop sessions tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14778

* chore: 🤖 Add support for dotenv and stop using relative paths

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14778

* refactor: 💡 Force usage of node 20

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14778
2024-12-10 16:11:12 -05:00
Cameron Perera 078e36f9b8 fix: 🐛 update @name attribute for RadioCard Groups (#2617)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15676
2024-12-10 14:12:43 -06:00
Zhihe Li 8874d0be86 docs: ✏️ Add to readme how to run admin e2e against local branch (#2616)
* docs: ✏️ Add to readme how to run admin e2e against local branch

* chore: 🤖 Add packageManager field for corepack users
2024-12-10 12:30:57 -05:00
Carlos Alcaide Corvo b59afd3455 test: 💍 Update test selectors for update host test (#2609) 2024-12-09 09:42:16 -08:00
Lauren 85a2684532 refactor: 💡 Replace rose::separator comp with hds::separator (#2613)
* refactor: 💡 Replace rose::separator comp with hds::separator

This PR replaces the rose::separator with the hds::separator and removes
an integration test that is no longer needed

✅ Closes: ICU-15646

* retire rose::separator and remove styling

* remove separator import

* remove separator.js
2024-12-06 12:54:47 -05:00
Carlos Alcaide Corvo f9a7864b07 fix: 🐛 Delete peerDeps within our addons (#2605)
* fix: 🐛 Delete peerDeps within our addons
2024-12-04 17:17:51 -08:00
Lisbet Alvarez 371301b4ba refactor: 💡 use hds::applicationstate instead of rose::message (#2577)
* refactor: 💡 use hds::applicationstate instead of rose::message

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15639
2024-12-04 14:16:05 -08:00
Zhihe Li 9c10d79661 Icu 14777 add more target tests (#2594)
* refactor: 💡 Move global setup to root
* refactor: 💡 Move env variable test fixture to global setup file
* test: 💍 Add more DC e2e tests for targets
* docs: ✏️ Updated e2e README

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14777
2024-12-03 18:51:22 -05:00
Carlos Alcaide Corvo 018d879a0a fix: 🐛 Fix addons/auth yarn warning (#2604)
Fix unmet peer dep within addons/auth
2024-12-03 13:35:01 -08:00
Carlos Alcaide Corvo b64f1876dc Refactor icu 15872 await authenticatesession admin (#2603)
* Add await for all authenticateSession within /tests/acceptance

* Add await for all authenticateSession within /tests/unit
2024-12-03 10:27:27 -08:00
Carlos Alcaide Corvo 055607b3dd refactor: 💡 Clean up release triggers (#2602) 2024-12-03 07:44:32 -08:00
Carlos Alcaide Corvo 8a7fa26cb5 refactor: 💡 Delete build desktop win docker (#2601) 2024-12-02 15:47:09 -08:00
Carlos Alcaide Corvo 9cac16fe6a refactor: 💡 Add await to authenticateSession within desktop (#2600) 2024-12-02 15:30:28 -08:00
Carlos Alcaide Corvo 61297dba02 refactor: 💡 Add await to invalidSession within admin (#2599) 2024-12-02 15:05:26 -08:00
Lisbet Alvarez 2f8a53e3ea refactor: 💡 remove rose table references (#2589)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15644
2024-12-02 12:22:01 -08:00
Carlos Alcaide Corvo 96b9a20844 refactor: 💡 Add await to invalidSession within desktop (#2598) 2024-12-02 11:51:12 -08:00
Carlos Alcaide Corvo 443f230251 refactor: 💡 Migrate ember-uuid to uuid (#2597)
* refactor: 💡 Migrate ember-uuid to uuid
2024-12-02 11:36:25 -08:00
86ee79e6bf Result of tsccr-helper -log-level=info gha update -latest .github/ (#2608)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2024-12-02 11:22:03 -08:00
Cameron Perera b24e5a2c22 fix: 🐛 default to light theme for acceptance tests (#2587)
* fix: 🐛 default to light theme for acceptance tests

* refactor: 💡 add async/await to authenticateSession
2024-12-02 12:51:24 -06:00
Carlos Alcaide Corvo 8c6b1aa69a Clean up auto-generated TODO comments (#2607) 2024-12-02 09:02:44 -08:00
Dharini Jeeva 36c2aee271 fix vault brokered credentials display (#2583)
* fix: 🐛 brokered credential display in credential panel
2024-11-26 14:34:10 -08:00
Carlos Alcaide Corvo b049635d28 chore: 🤖 Upgrade uuid (#2591)
Upgrade uuid
2024-11-26 09:23:41 -08:00
Carlos Alcaide Corvo 42dd029611 refactor: 💡 Remove rose:linkbutton (#2590)
Remove rose:linkbutton references and tests
2024-11-26 08:58:09 -08:00
Carlos Alcaide Corvo e02c50aef8 chore: 🤖 Upgrade sinon (#2585)
Upgrade sinon to v19
2024-11-26 08:41:23 -08:00
Carlos Alcaide Corvo d9cf112694 chore: 🤖 Upgrade lint-staged to v15 (#2586)
Upgrade lint-staged to v15
2024-11-22 15:17:07 -08:00
Carlos Alcaide Corvo a4456f50cd refactor: 💡 Delete not necessary comments (#2588) 2024-11-22 11:27:53 -08:00
Carlos Alcaide Corvo a358061f22 chore: 🤖 Delete ember-cli-app-version (#2584)
Delete ember-cli-app-version
2024-11-22 09:09:56 -08:00
Carlos Alcaide Corvo f155e8ad44 Migrate embe-autofocus-modifier to HTML autofocus standard (#2581) 2024-11-22 08:48:53 -08:00
Lisbet Alvarez c930bb235b style: 💄 fix z-index for rose-dialog modal (#2579) 2024-11-20 12:23:52 -08:00
Lisbet Alvarez 543cf4697f refactor: 💡 remove rose::notification in favor of hds (#2557)
* refactor: 💡 remove rose::notification in favor of hds

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15634
2024-11-19 15:18:18 -08:00
Carlos Alcaide Corvo 66e9e971a1 Upgrade ember-simple-auth to latest (#2573)
Upgrade ember-simple-auth to latest

* Change ember-auto-import from devDependencies to dependencies
2024-11-19 13:47:36 -08:00
Cameron Perera a961b5e4be chore: 🤖 bump fast-sourcemap-concat version (#2575) 2024-11-19 15:28:20 -06:00
Dharini Jeeva f8796b362e chore: 🤖 remove ember radio btn, update it with hds (#2556)
* chore: 🤖 remove ember radio btn, update it with hds
2024-11-19 13:03:29 -08:00
Dharini Jeeva 415f638028 Icu 15713 address deprecation warning for dropdown interactive element (#2561) 2024-11-19 11:32:06 -08:00
Carlos Alcaide Corvo 4523615829 chore: 🤖 Upgrade ember-cookies (#2572)
* chore: 🤖 Upgrade ember-cookies
2024-11-18 12:28:18 -08:00
Carlos Alcaide Corvo 61214af01a chore: 🤖 Upgrade and Migrate husky from v8 to v9 (#2571)
Upgrade and migrate Husky from v8 to v9.1.6
2024-11-18 11:51:30 -08:00
Zhihe Li 2f0bf5dc17 fix: 🐛 Fix unintentional changes to yarn lock (#2570) 2024-11-14 17:18:46 -05:00
Zhihe Li 6e71712092 refactor: 💡 Fix linting errors in e2e (#2563) 2024-11-14 16:44:11 -05:00
Zhihe Li 7e56e1cccf style: 💄 Run prettier on e2e tests (#2560) 2024-11-12 18:11:00 -05:00
Cameron Perera 1e3f533d83 refactor: 💡 move WorkerFilter component to more generic folder (#2558)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15742
2024-11-12 14:10:06 -06:00
Lisbet Alvarez 57568f9a8c test: 💍 add missing controller unit tests in admin-ui (#2553)
* test: 💍 add missing controller unit tests in admin-ui

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14740
2024-11-12 09:27:07 -08:00
Zhihe Li 7c1814118d refactor: 💡 Move e2e tests to new folder (#2546)
* refactor: 💡 Move e2e tests to new folder

* refactor: 💡 Convert desktop tests to mjs and use es6 imports

* refactor: 💡 Use module setting for e2e directory and remove mjs

* refactor: 💡 Remove "e2e" in all scripts in package.json
2024-11-12 11:21:37 -05:00
Michael Li ca50a963fd test(e2e): Add extra timeout for "delete resources" test (#2524) 2024-11-11 09:10:13 -05:00
Cameron Perera 6e188c6996 Icu 15465 credential library create test (#2555)
* test: 💍 use commonSelectors in cred-lib tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15465

* test: 💍 create selectors for cred-lib acceptance tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15465

* test: 💍 finish selector refactor for cred-lib create

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15465
2024-11-08 15:12:43 -06:00
Carlos Alcaide Corvo 0095c5c666 chore: 🤖 Upgrade qunit-dom (#2552)
* chore: 🤖 Upgrade qunit-dom and qunit
2024-11-08 09:09:22 -08:00
Carlos Alcaide Corvo bdd7f303c4 test: 💍 Update test selectors for read hosts (#2549)
* test: 💍 Update test selectors for read hosts
2024-11-07 13:54:27 -08:00
Lisbet Alvarez f0383522d8 chore: 🤖 audit remaining resolutions (#2550) 2024-11-07 13:30:21 -08:00
Dharini Jeeva a32cc13171 Icu 15481 groups read and list test (#2551)
* refactor: 💡 test selectors in read and list groups
2024-11-06 15:13:17 -08:00
Dharini Jeeva dbda8c5674 Icu 15480 groups create test (#2544) 2024-11-06 10:59:16 -08:00
Carlos Alcaide Corvo 186873d9d4 Remove build debian in Mac OS and all its dependencies (#2543) 2024-11-06 10:19:49 -08:00
Carlos Alcaide Corvo 37482c0b36 chore: 🤖 Upgrade Concurrently (#2547)
Upgrade Concurrently from 8.2.0 to 9.1.0

✅ Closes: ICU-15651
2024-11-06 09:27:11 -08:00
hashicorp-tsccr[bot]andhashicorp-tsccr[bot] ccdc5a03ac Result of tsccr-helper -log-level=info gha update -latest .github/ (#2548)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
2024-11-04 10:54:51 -08:00
Carlos Alcaide Corvo 2ae24c4627 Change boundary-ui-releases to boundary-desktop-releases (#2535) 2024-11-04 10:16:09 -08:00
Carlos Alcaide Corvo b9e9fd21ee Chore icu 15637 upgrade ember test helpers (#2545)
* Upgrade ember-test helpers

* Upgrade ember-int and ember-cli-clipboard, as ember-test-helpers introduces a breaking change
2024-11-04 09:57:07 -08:00
Zack Moore 6eb83b2a25 Upgrade HDS dependency to 4.13 & migrate FlightIcon to Hds::Icon (#2540)
* updated hds and replaced deprecated flight-icon

* removed code trying to import from ember-flight-icons

* fixing linting issue

* fixing linting issue

* fixing dropdown test selectors

* updated dropdown selectors

* updated dropdown selectors

* updated dropdown selectors

* addressing pr feedback

* fixing linting error

* updating dropdown selectors
2024-11-04 11:29:56 -06:00
Carlos Alcaide Corvo 70aceb1699 Update test selectors for create hosts (#2542)
* Use of common and domain specific selectors for create host test.
2024-11-04 08:43:41 -08:00
Dharini Jeeva 5e208c4115 Enable storage bucket deletion (#2541)
* fix: 🐛 enable storage bucket deletion
2024-10-31 09:36:19 -07:00
Lisbet Alvarez 390f051e43 chore: 🤖 audit most recent resolutions (#2531)
* chore: 🤖 audit most recent resolutions
2024-10-28 16:28:26 -07:00
Cameron Perera ab0f1fd549 test: 💍 update test selectors for accounts update (#2539)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14042
2024-10-28 14:27:55 -05:00
Zhihe Li 788df7b16d test: 💍 Add some settings page tests (#2538) 2024-10-28 15:10:54 -04:00
Lisbet Alvarez 01a2d8e9a6 refactor: 💡 remove route-action usage in admin ui (#2534)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-12945
2024-10-28 09:23:08 -07:00
Cameron Perera e842eb001d Icu 14039 accounts list, read, and set-password test (#2537)
* test: 💍 update test selectors for accounts list

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14039

* test: 💍 update test selectors for accounts read

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14039

* test: 💍 update test selectors for accounts set password

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14039
2024-10-25 15:58:09 -05:00
Cameron Perera f195e5dc9d Icu 15405 remove patch and resolutions due to ember cli upgrade (#2536)
* chore: 🤖 remove lodash.template patch

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15405

* chore: 🤖 remove markdown-it resolution

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15405

* chore: 🤖 async dependency clean up

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15405

* chore: 🤖 remove clean-css resolution

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15405

* chore: 🤖 remove winston/async resolution

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15405
2024-10-24 06:57:49 -05:00
Cameron Perera 7f7f0f1859 test: 💍 update test selectors for accounts delete (#2532)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14038
2024-10-23 11:33:55 -05:00
Cameron Perera b494a703eb chore: 🤖 upgrade ember-cli version (#2533)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15393
2024-10-23 09:40:45 -05:00
Lisbet Alvarez 0f52b86364 refactor: 💡 remove route-action usage for targets and sessions (#2528)
* refactor: 💡 remove route-action usage for targets and sessions

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15040
2024-10-22 13:16:58 -07:00
Cameron Perera 1b31188d5e test: 💍 selectors refactor for accounts create (#2527)
* test: 💍 selectors refactor for accounts create

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14037

* refactor: 💡 remove name & description duplicate selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14037
2024-10-21 17:12:00 -05:00
Lisbet Alvarez 30e7268297 chore: 🤖 resolve socks to new version to fix ip vulnerability (#2529)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14207
2024-10-21 10:22:32 -07:00
Dharini Jeeva 6956b30fd6 Update credentials (#2523)
* feat: 🎸 allow AWS host catalog credential type update
2024-10-18 14:33:14 -07:00
Cameron Perera 98d19ef591 test: 💍 add new selectors for accounts acceptance tests (#2525)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14036
2024-10-18 09:56:31 -05:00
Carlos Alcaide Corvo f0ffcea424 chore: 🤖 Clean up Desktop out directory (#2521)
* chore: 🤖 Clean up Desktop out directory
2024-10-18 09:27:40 +02:00
Michael Li 6454fb7061 test(e2e): Add check for worker filters (#2513)
* test(e2e): Add check to add an ingress worker filter

* test(e2e): Add check for editing a worker filter
2024-10-17 12:51:49 -04:00
Lisbet Alvarez c0d7af7899 fix: 🐛 alias disappearing on target details page (#2519)
* fix: 🐛 alias disappearing on target details page

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15296

* test: 💍 fix test

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15296
2024-10-15 12:58:43 -07:00
Cameron Perera 2424395415 fix: 🐛 add bottom border back to ListWrapper component (#2522) 2024-10-15 13:54:14 -05:00
Zhihe Li dde2f259e8 chore: 🤖 Update changelog (#2516) 2024-10-11 11:58:16 -04:00
Zhihe Li e38c28c288 fix: 🐛 Push associated targets in sessions to ember store (#2518) 2024-10-10 17:03:27 -04:00
Dharini Jeeva 0ff91f9182 fix: 🐛 minor UI changes, ent flag for worker filter (#2517) 2024-10-10 12:44:12 -07:00
Lisbet Alvarez 857bf01596 style: 💄 issues with spacing in manage scopes pages for a role (#2515)
* style: 💄 issues with spacing in manage scopes pages for a role

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15287
2024-10-09 15:17:42 -07:00
Dharini Jeeva 965e82473d Types for aws host catalogs (#2514)
assume role dynamic AWS credentials
2024-10-09 14:49:22 -07:00
Dharini Jeeva 0d55812f64 Add worker type dynamic host catalog (#2511)
* fix: 🐛 add worker filter support for aws host catalogs
2024-10-08 10:58:52 -07:00
Lisbet Alvarez e807e1a3af fix: 🐛 cannot retry oidc authentication in desktop & admin (#2512)
* fix: 🐛 cannot retry oidc authentication in desktop & admin

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15250
2024-10-08 10:29:21 -07:00
Lisbet Alvarez 64e568bd72 fix: 🐛 deleting session recording causes error (#2510)
* fix: 🐛 deleting session recording causes error

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15236

* fix: 🐛 remove scope filter & remove unused translation

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15236
2024-10-04 08:14:30 -07:00
Carlos Alcaide CorvoandDharini Jeeva 401ff354e8 Llb ts desktop no cli (#2491)
Changes to allow Desktop client build with no CLI
---------
Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2024-10-04 16:35:18 +02:00
Michael Li 9c31154941 test(e2e): Updates from 0.18.0 testing (#2509)
* test(e2e): Update locators that can't be found

* test(e2e): Fix race condition

It seems like the alias tests were failing as it was unable to open the Manage menu here. One theory is that we need to make sure the alias page has fully loaded before it tries to click the Manage button (the test might be finding the Manage button from the previous screen and clicking that)

* CR: Fix Alias header check
2024-10-04 08:39:20 -04:00
Lisbet Alvarez 1947365c91 chore: 🤖 resolve rollup vulnerability by removing ember-fetch (#2505)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15189
2024-10-02 16:11:22 -07:00
Michael Li be528dae47 test(e2e): Add test for worker tags (#2507) 2024-10-02 14:04:38 -04:00
Cameron Perera d3c789c66c Icu 15181 add pagination to session recordings (#2502)
* refactor: 💡 move model hook to session-recordings/index route

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* test: 💍 add missing tests for session recordings controller

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* feat: 🎸 paginate session-recordings and search

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* refactor: 💡 fix failing redirect and tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* test: 💍 add search tests for session recordings

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* feat: 🎸 add user filtering for session recordings

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* feat: 🎸 add more attributes to indexed-db session recordings

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* feat: 🎸 add target filter for session recordings

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* refactor: 💡 update filterOptions method

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15130

* feat: 🎸 add scopes filtering to session recording

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* feat: 🎸 add time filter to session recordings

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* refactor: 💡 add no filter results text

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* refactor: 💡 update Exist variables to doExist

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* refactor: 💡 updates from PR feedback

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* refactor: 💡 remove scope_id filter

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* refactor: 💡 change session recording placeholder text

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* chore: 🤖 increment indexedDB version

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* test: 💍 add Date object tests for indexed-db

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* refactor: 💡 small changes from PR feedback

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* refactor: 💡 change times filter array to time date object

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* test: 💍 add more date specific indexed-db test

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* refactor: 💡 change Today time shortcut to "Last 24 hours"

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181

* test: 💍 fix date mock in session-recording controller tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-15181
2024-10-01 13:55:15 -05:00
Michael Li 15727f61fd test(e2e): Add Admin UI test for vault credential libraries (enterprise) (#2501) 2024-10-01 12:11:14 -04:00
hashicorp-tsccr[bot]andhashicorp-tsccr[bot] 486d8b116a Result of tsccr-helper -log-level=info gha update -latest . (#2506)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
2024-10-01 14:32:36 +02:00
91ffbfb315 icu-14735 add search & pagination to aliases (#2498)
* refactor: 💡 add search & pagination to aliases

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14735
---------

Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2024-09-30 13:07:13 -07:00
Dharini Jeeva 9b33812f9e fix: 🐛 bucket types icon in target association (#2503)
* fix: 🐛 bucket types icon in target association
2024-09-27 12:23:16 -07:00
Zhihe Li b40c53fb45 feat: 🎸 Update alert designs (#2496) 2024-09-24 14:30:52 -04:00
Zhihe Li 97258f7525 Use updated cache daemon (#2475)
* feat: 🎸 Handle truncated cache daemon response
2024-09-24 14:30:52 -04:00
Zhihe Li ace65eab3a fix: 🐛 Fix theme selector not properly selecting option (#2495) 2024-09-24 11:58:26 -04:00
Zhihe Li 20e6df522a feat: 🎸 Hide daemon errors initially (#2477)
* feat: 🎸 Hide daemon errors initially

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14961

* feat: 🎸 Move the user and server cards up in settings

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14962
2024-09-24 11:58:26 -04:00
Dharini Jeeva c8abc3845a fix: 🐛 pass current usl to maintain session (#2472)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14963
2024-09-24 11:58:26 -04:00
Zhihe Li 6cd2f0f7d8 fix: 🐛 Fix windows hanging when client agent isn't running (#2459) 2024-09-24 11:58:25 -04:00
Zhihe Li 1266930647 chore: 🤖 Remove client agent feature flag (#2449) 2024-09-24 11:58:25 -04:00
Dharini Jeeva 695d9d413d fix: 🐛 remove connected lable (#2446) 2024-09-24 11:58:25 -04:00
Zhihe Li edaf19f59b feat: 🎸 Add section for client agent in settings (#2442)
* feat: 🎸 Add section for client agent in settings

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14780
2024-09-24 11:58:25 -04:00
Dharini Jeeva de5defeab2 Icu 14781 add a section for server information (#2438) 2024-09-24 11:58:25 -04:00
Zhihe Li 63ec418cf0 feat: 🎸 Show cache daemon errors from status (#2437)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14816
2024-09-24 11:58:25 -04:00
Zhihe Li e4f4394197 Icu 14403 add dropdown to select and save log verbosity (#2431)
* feat: 🎸 Add logging settings card

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14403
2024-09-24 11:58:25 -04:00
Dharini Jeeva 0b9357e9b3 chore: 🤖 add user info (#2425)
* chore: 🤖 add user info
2024-09-24 11:58:25 -04:00
Dharini Jeeva 777380e19f Add theme selection (#2428)
* fix: 🐛 remove theme from main menu bar and move to settings pag

* chore: 🤖 move toggletheme to app controller
2024-09-24 11:58:24 -04:00
Dharini Jeeva 25b3a940a3 Icu 14400 add a section for version info cli and dc (#2409)
* chore: 🤖 cli info
2024-09-24 11:58:24 -04:00
Dharini Jeeva a97f66e011 feat: 🎸 settings page (#2395)
* feat: 🎸 settings page
2024-09-24 11:58:24 -04:00
Cameron Perera fac7d2b128 small update to desktop README (#2497) 2024-09-23 16:05:10 -05:00
Dharini Jeeva ad1bb34453 fix: show username first and then password when credentials are listed (#2494) 2024-09-19 14:22:25 -07:00
Lisbet Alvarez 8605a54221 refactor: 💡 remove route-action usage for scopes in desktop (#2447)
* refactor: 💡 remove route-action usage for scopes in desktop

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-12621
2024-09-17 16:36:47 -07:00
Lisbet Alvarez 98cd9dc1ec chore: 🤖 add resolution for send (#2490) 2024-09-16 12:27:13 -07:00
Cameron Perera bd857836ee Icu 14208 vulnerabilities in boundary UI enterprise lodash template 4 5 0 in yarn lock (#2485)
* fix: 🐛 add patch for lodash.template

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14208

* chore: 🤖 add patch-package and postinstall-postinstall

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14208

* fix: 🐛 add patch for lodash.template

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14208

* chore: 🤖 add patch-package and postinstall-postinstall

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14208
2024-09-16 09:27:40 -05:00
Carlos Alcaide Corvo 4974273bd0 chore: 🤖 Upgrade git-cz (#2488)
Upgrade git-cz from 4.8.0 to 4.9.0. As per git-cz changelog, there are
no breaking changes
2024-09-13 16:14:21 -07:00
Lisbet Alvarez c4e58fb780 refactor: 💡 change channel app state title & add alert msg (#2489)
* refactor: 💡 change channel app state title & add alert msg

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-11148
2024-09-13 13:24:45 -07:00
dependabot[bot]andCameron Perera 2515efead6 chore(deps-dev): bump webpack from 5.88.2 to 5.94.0 (#2466)
Bumps [webpack](https://github.com/webpack/webpack) from 5.88.2 to 5.94.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.88.2...v5.94.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2024-09-13 14:12:58 -05:00
Cameron Perera fda3ca9d4b fix: 🐛 add regex literal for isLocalHost check (#2484)
* fix: 🐛 add ':' to isLocalHost check

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-13242

* refactor: 💡 use regex to verify href is localhost

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-13242
2024-09-13 13:03:40 -05:00
Cameron Pereraandcameronperera 9648e1fa3b Add duration unit format (#2483)
* chore: 🤖 add @formatjs/intl-durationformat to addons/core

* refactor: 💡 replace old duration format with new package

* chore: 🤖 remove intl-unofficial-duration-unit-format

* Add missing copyright headers

* test: 💍 add more test cases

---------

Co-authored-by: cameronperera <cameronperera@users.noreply.github.com>
2024-09-13 09:43:08 -05:00
Lisbet Alvarez e395b1196c Chore resolve path to regexp vulnerability (#2482)
* chore: 🤖 resolve path-toregexp vulnerability

* chore: 🤖 resolve body-parser vulnerability
2024-09-11 14:20:47 -07:00
Lisbet Alvarez b7e6492d26 chore: 🤖 add resolution for micromatch (#2481) 2024-09-10 09:28:47 -07:00
Zhihe Li 6311d7587e fix: 🐛 Fix daemon getting killed if started before DC (#2480) 2024-09-09 14:55:38 -04:00
Cameron Perera 07573d6b2c Fix/json5 security issue (#2479)
* chore: 🤖 delete and re-install find-babel-config from yarn.lock

* chore: 🤖 remove json5 resolution
2024-09-06 14:45:38 -05:00
Lisbet Alvarez 90890441e1 chore: 🤖 upgrade braces to 3.0.3 to fix security vulnerability (#2476)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14205
2024-09-06 10:32:30 -07:00
Cameron Perera 1430adce7e refactor: 💡 update test selectors for storage-buckets list (#2463)
* refactor: 💡 update test selectors for storage-buckets list

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14034

* refactor: 💡 update sidebar nav link test selector

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14034
2024-09-06 09:56:24 -05:00
Cameron Perera 89afee7297 chore: 🤖 upgrade semver versions (#2473)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14213
2024-09-06 09:33:57 -05:00
Zhihe Li 78f89da348 style: 💄 Fix text description (#2478) 2024-09-05 17:53:19 -04:00
Cameron Perera 9bacb55e87 chore: 🤖 update TODO to with ICU ticket (#2474)
* chore: 🤖 update TODO to with ICU ticket

* chore: 🤖 add message back to todo
2024-09-05 10:21:17 -05:00
Cameron Perera dea4a62955 test: 💍 add TODO for a11y violations (#2471) 2024-09-04 15:44:42 -05:00
Lisbet Alvarez ef163709f2 Upgrade ember a11y testing to v7 (#2470)
* chore: 🤖 update ember-a11y-testing and @ember/test-helpers

* chore: 🤖 upgrade to v7

* chore: 🤖 upgrade deps and force resolutions to fix errors

* chore: 🤖 fix ember-a11y errors due to summary title not showing

* chore: 🤖 fix yarn.lock
2024-09-04 13:04:14 -07:00
hashicorp-tsccr[bot]andhashicorp-tsccr[bot] 0cfa814cdd Result of tsccr-helper -log-level=info gha update -latest . (#2469)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
2024-09-04 11:41:24 -07:00
Lisbet Alvarez 694c43296a chore: 🤖 remove request unused dependency resolution (#2467)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14214
2024-08-29 12:17:27 -07:00
Lisbet Alvarez c98bfb5622 chore: 🤖 upgrade jsonpointer to v5 (#2465)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14212
2024-08-28 09:33:47 -07:00
Michael Li 7cebece600 refact(e2e): Use fixtures for environment variables (#2452) 2024-08-28 11:54:58 -04:00
WadiandCameron Perera a9cfc43404 Icu 14663 update manage dropdown for credential stores form (#2454)
* refactor: 💡 Update Manage dropdown in credential-store

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14663

* refactor: 💡 Adjusted tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14663

* refactor: 💡 Refactored tests and naming conventions

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14663

* refactor: 💡 Removed @model from delete

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14663

* test: 💍 add clicks to correct tests assertions

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14663

---------

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2024-08-26 14:58:14 -05:00
WadiandCameron Perera c38ba294cc refactor: 💡 Update Manage Dropdown in auth-methods (#2460)
* refactor: 💡 Update Manage Dropdown in auth-methods

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14704

* refactor: 💡 Refactored tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14704

---------

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2024-08-26 14:30:57 -05:00
Cameron Perera ce2649272f chore: 🤖 upgrade ember-qunit to v8.1.0 (#2462)
and ember-cli to 4.12.2 in addons/api
2024-08-26 14:13:45 -05:00
WadiandCameron Perera 3d60d047e3 refactor: 💡 Manage dropdown HDS refactoring for managed-groups (#2455)
* refactor: 💡 Manage dropdown HDS refactoring for managed-groups

Updated the manage dropdown to reflect HDS design

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14603

* refactor: 💡 Changed up naming convention for Manage dropdown

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14603

---------

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2024-08-26 10:48:36 -05:00
WadiandCameron Perera a3082e97e6 refactor: 💡 Update manage dropdown for host-catalogs (#2456)
* refactor: 💡 Update manage dropdown for host-catalogs

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14664

* refactor: 💡 Refactored tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14664

* refactor: 💡 Refactored test

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14664

---------

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2024-08-26 09:44:51 -05:00
dependabot[bot]andZhihe Li 333eebd731 chore(deps): bump micromatch in /ui/desktop/electron-app (#2461)
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/4.0.8/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2024-08-23 16:36:41 -04:00
Lisbet Alvarez 320af9f6f7 chore: 🤖 upgrade to ws v8.17.1 to remove vulnerability (#2451)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14204
2024-08-23 13:25:10 -07:00
Cameron Perera af9b832d38 chore: 🤖 update ember-cli-mirage (#2458)
* chore: 🤖 update ember-cli-mirage

* chore: 🤖 move ember-cli-mirage to dependencies

* chore: 🤖 remove duplicate dependency
2024-08-23 14:40:42 -05:00
Wadi bea791b2e6 refactor: 💡 Update Manage dropdown in Credentials form (#2453)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14665
2024-08-23 12:03:26 -04:00
Wadi e31ac72531 ICU-14870 Update Manage Dropdown for Projects form (#2457)
* refactor: 💡 HDS Manage Dropdown for Projects

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14870

* refactor: 💡 Fixing up tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14870

* refactor: 💡 Updated naming convention and consolidated

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14870
2024-08-23 11:53:26 -04:00
Michael Li 075d8c6d8f refact(e2e): Create HTTP methods and more page objects (#2448)
* refact(e2e): Create LoginPage

* refact(e2e): Create http methods

* refact(e2e): Create more methods
2024-08-23 10:17:10 -04:00
Lauren 56f42c3f5a docs: ✏️ replace broken links, add hyperlinks, language updates (#2445)
This PR updates the repo READMEs by replacing a broken link and pointing to correct tutorials page, adding hyperlinks to improve readability, and small language updates
2024-08-20 16:14:19 -04:00
Carlos Alcaide Corvo af7196215b chore: 🤖 Migrate xterm to @xterm (#2444) 2024-08-20 09:40:08 -07:00
dependabot[bot]andDharini Jeeva 80d2898e56 chore(deps): bump elliptic from 6.5.4 to 6.5.7 (#2443)
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.4 to 6.5.7.
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.4...v6.5.7)

---
updated-dependencies:
- dependency-name: elliptic
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Dharini Jeeva <dharini@hashicorp.com>
2024-08-20 09:09:14 -05:00
Carlos Alcaide Corvo f607e77274 Automate copyright headers addition (#2440)
* Refactor checking headers to automatically add them
2024-08-19 14:22:27 -07:00
Michael Li 007f5d8b46 refact(e2e): Split up boundary-cli helper methods (#2430)
* refact(e2e): Split up boundary-cli helper methods

* CR: Use ESM import

* CR: Move authenticated state to a non-shared file

* CR: Use mjs

* CR: Modify playwright config to .mjs
2024-08-19 16:00:16 -04:00
Lisbet Alvarez a9d110a1b6 refactor: 💡 remove route-action usage for session recordings (#2439)
* refactor: 💡 remove route-action usage for session recordings

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-12620
2024-08-16 10:04:46 -07:00
Lisbet AlvarezandCameron Perera 79b06ee565 ICU-13883 add remove org modal (#2435)
* feat: 🎸 add remove org modal

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-13883

---------

Co-authored-by: Cameron Perera <cameron.perera@hashicorp.com>
2024-08-15 16:04:46 -07:00
Lisbet Alvarez 0af81d9bc1 refactor: 💡 remove route action usage for scopes (#2385)
* refactor: 💡 remove route action usage for scopes

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-13755
2024-08-15 10:46:00 -07:00
Cameron Perera 9e668e8467 Icu 14834 remove duplicate selectors and use common selectors instead (#2436)
* refactor: 💡 update SAVE_BTN usage

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14834

* refactor: 💡 update CANCEL_BTN usage

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14834

* refactor: 💡 update EDIT_BTN usage

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14834

* refactor: 💡 update FIELD_NAME & FIELD_NAME_VALUE usage

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14834
2024-08-15 09:24:21 -05:00
Wadi 69da1fa04c refactor: 💡 Updated Manage Dropdown in auth-methods accounts (#2432)
* refactor: 💡 Updated Manage Dropdown in auth-methods accounts

Updated Manage Dropdown in auth-methods account form to HDS

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14599

* refactor: 💡 Changed asssert statement in delete-test.js

Changed statement to reflect proper syntax and testing capability

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14599
2024-08-12 13:52:56 -04:00
Wadi 392792eb92 refactor: 💡 Updated Manage Dropdown in credential-library (#2434)
Updated Manage Dropdown present in credential-library to reflect new HDS
design

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14601
2024-08-12 13:41:08 -04:00
Wadi 9c018f131f refactor: 💡 Updated Manage Dropdown in host-sets to HDS design (#2433)
* refactor: 💡 Updated Manage Dropdown in host-sets to HDS design

Updated the manage dropdown in host-sets to reflect HDS design

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14600

* refactor: 💡 Specified selector in host-test.js

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14600
2024-08-12 13:25:43 -04:00
Cameron Perera 0542218537 Icu 14033 storage buckets read test (#2414)
* test: 💍 update storage-bucket read test selectors

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14033

* test: 💍 add common selectors in tests/helpers

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14033

* refactor: 💡 update selector name and value

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14033

* refactor: 💡 update selector name

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14033
2024-08-12 10:41:27 -05:00
Lisbet Alvarez 7ac904a31f ICU-14496 add discard unsaved changes modal to manage scopes (#2421)
* refactor: 💡 add discard unsaved changes modal

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14496
2024-08-08 10:46:39 -07:00
Lisbet Alvarez a7d9a7e348 fix: 🐛 targets not displaying even after they are cached (#2429)
* fix: 🐛 targets not displaying even after they are cached

* fix: 🐛 modify check in sessions route
2024-08-07 10:38:38 -07:00
Michael Li 0d0dadf398 chore(e2e): Fix eslint for Admin UI e2e tests (#2427)
* chore(e2e): Fix eslint for e2e tests

* chore(e2e): Fix license headers
2024-08-06 14:26:19 -04:00
Michael Li 45c16252a7 refact(e2e): Update Admin UI tests to use Page Objects (#2426)
* refact(e2e): Use page object methods

* refact(e2e): Create base page class
2024-08-06 13:15:00 -04:00
Wadi 9b3cbaa6b3 refactor: 💡 Updated Manage Dropdown to HDS in Targets Menu (#2418)
* refactor: 💡 Updated Manage Dropdown to HDS in Targets Menu

Updated the manage dropdown present in the targets scope to reflect HDS
design

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14597

* refactor: 💡 Updated to reflect changes

Added changes to reflect variable design

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14597

* refactor: 💡 Removed @deleted attribute

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14597
2024-08-05 13:04:02 -04:00
Wadi 89cfb14d6e refactor: 💡 Updated Manage Dropdown for hosts form (#2423)
* refactor: 💡 Updated Manage Dropdown for hosts form

Continuing refactoring upgrades for HDS managed dropdowns

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14602

* refactor: 💡 Removed disabled attribute from dropdown

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14602
2024-08-05 12:53:55 -04:00
Zhihe Li a68d7d103a feat: 🎸 Setup initial desktop E2E tests (#2416)
* feat: 🎸 Setup initial desktop E2E tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-14061
2024-08-02 13:28:50 -04:00
hashicorp-tsccr[bot]andhashicorp-tsccr[bot] 4dc5e13f24 Result of tsccr-helper -log-level=info gha update -latest . (#2422)
Co-authored-by: hashicorp-tsccr[bot] <hashicorp-tsccr[bot]@users.noreply.github.com>
2024-08-01 10:13:24 -07:00
1445 changed files with 66506 additions and 52745 deletions

No files matched your search

+2
View File
@@ -15,5 +15,7 @@ project {
"**/coverage/**",
"ui/desktop/electron-app/out/**",
"ui/desktop/electron-app/ember-dist/**",
"**/pnpm-lock.yaml",
"**/pnpm-workspace.yaml",
]
}
+48 -12
View File
@@ -11,21 +11,57 @@ assignees: ''
For questions, the best place to get answers is on our [discussion forum](https://discuss.hashicorp.com/c/boundary), as they will get more visibility from experienced users than the issue tracker.
Please note: We take Boundary's security and our users' trust very seriously. If you believe you have found a security issue in Boundary, please responsibly disclose by contacting us at security@hashicorp.com. Our PGP key is available at [our security page](https://www.hashicorp.com/security/).
Please note: We take Boundary's security and our users' trust very seriously. If you believe you have found a security issue in Boundary, please responsibly disclose this by contacting us at security@hashicorp.com. Our PGP key is available on [our security page](https://www.hashicorp.com/security/).
Logging is available on Boundary Desktop Client version >= 2.1.0
Logs are found at:
Linux: ~/.config/Boundary/logs/desktop-client.log
MacOS: ~/Library/Logs/Boundary/desktop-client.log
Windows: $env:USERPROFILE\AppData\Roaming\Boundary\logs\desktop-client.log
If requests are taking longer than expected, please change the logging level to DEBUG. This will log the cache daemon request times as well.
-->
**Describe the bug**
A clear and concise description of what the bug is.
## :bug: Bug Report
**To Reproduce**
Steps to reproduce the behavior:
1. Run `boundary authenticate ...`
2. Run `boundary connect ...`
3. See error
### **Description**
**Expected behavior**
A clear and concise description of what you expected to happen.
_A clear and concise description of the bug._
**Additional context**
Add any other context about the problem here.
### **Steps to Reproduce**
1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See the error
## **Expected behavior**
_A clear description of what you expected to happen._
## **Actual behavior**
_A clear description of what actually happened._
## **Screenshots (if applicable)**
_Add screenshots or screen recordings to help explain the issue._
## **Environment**
- **OS and Version:** (e.g., Windows 10 (22H2), macOS (14.7.2))
- **Architecture:** (e.g., arm64, x86_64)
- **Browser/Version:** (if applicable)
- **Desktop Client Version:** (if applicable)
- **Controller/worker versions:** (if applicable)
## **Logs & Console Output (if applicable)**
_Paste any relevant error logs or browser console output here._
## **Additional Context**
_Any other details that might be relevant._
+6
View File
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
+8
View File
@@ -18,3 +18,11 @@
- [ ] I have commented on my code, particularly in hard-to-understand areas
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my feature works
## PCI review checklist
<!-- heimdall_github_prtemplate:grc-pci_dss-2024-01-05 -->
- [ ] I have documented a clear reason for, and description of, the change I am making.
- [ ] If applicable, I've documented a plan to revert these changes if they require more than reverting the pull request.
- [ ] If applicable, I've documented the impact of any changes to security controls.
Examples of changes to security controls include using new access control methods, adding or removing logging pipelines, etc.
+6 -6
View File
@@ -27,7 +27,6 @@ echo "Trying to merge the latest oss commit - ${latest_oss_commit} from oss/${BR
if ! errors=$(git merge -m "Merge Boundary UI OSS branch '${BRANCH}' at commit ${latest_oss_commit}" "${latest_oss_commit}"); then
# Here we can try to auto resolve conflicts
# This logic will vary from project to project. The below is just an example.
# We'll try to resolve package.json and yarn.lock conflicts by taking the OSS changes
conflicts=$(git diff --name-only --diff-filter=U)
printf "Found conflicts:\n${conflicts}\n"
# Resolve package.json conflicts by taking oss
@@ -36,11 +35,12 @@ if ! errors=$(git merge -m "Merge Boundary UI OSS branch '${BRANCH}' at commit $
git checkout --theirs package.json
git add package.json
fi
# Resolve yarn.lock conflicts by taking oss
if echo "$conflicts" | grep -q yarn.lock; then
echo "Checking out oss yarn.lock..."
git checkout --theirs yarn.lock
git add yarn.lock
# Resolve pnpm-lock.yaml conflicts by re-running pnpm install:
# https://pnpm.io/git#merge-conflicts
if echo "$conflicts" | grep -q pnpm-lock.yaml; then
echo "Re-running pnpm install to fix conflicts by regenerating pnpm-lock.yaml..."
pnpm install
git add pnpm-lock.yaml
fi
# If we can commit all the changes without conflict, we have resolved everything automatically
+39 -44
View File
@@ -9,91 +9,86 @@ on:
jobs:
dependencies:
name: Install dependencies
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
id: node-modules-cache
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
path: "**/node_modules"
key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
node-modules-
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
run_install: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
- run: yarn install
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --frozen-lockfile
build-admin-ui-oss:
name: Build Admin UI OSS
needs: [dependencies]
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
id: node-modules-cache
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
path: "**/node_modules"
key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
node-modules-
run_install: false
- name: Build
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
- run: yarn run build:ui:admin:oss
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --offline
- run: pnpm run build:ui:admin:oss
- name: Upload artifact admin-ui
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: admin-ui
path: ./ui/admin/dist/
- name: Upload artifact OSS admin UI
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: admin-ui-oss
path: ./ui/admin/dist/
build-admin-ui-enterprise:
name: Build Admin UI Enterprise
needs: [dependencies]
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
id: node-modules-cache
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
path: "**/node_modules"
key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
node-modules-
run_install: false
- name: Build
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
- run: yarn run build:ui:admin:enterprise
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --offline
- run: pnpm run build:ui:admin:enterprise
- name: Upload artifact enterprise admin UI
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: admin-ui-ent
path: ./ui/admin/dist/
build-admin-ui-hcp:
name: Build Admin UI HCP
needs: [dependencies]
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
id: node-modules-cache
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
path: "**/node_modules"
key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
node-modules-
run_install: false
- name: Build
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
- run: yarn run build:ui:admin:hcp
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --offline
- run: pnpm run build:ui:admin:hcp
- name: Upload artifact HCP admin UI
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: admin-ui-hcp
path: ./ui/admin/dist/
@@ -1,34 +0,0 @@
name: "Trigger Build Artifacts for Testing"
on:
workflow_dispatch:
inputs:
branch:
description: Please use tag-like format n.n.n-someword (1.111.11-beta)
required: true
product_version:
required: true
type: string
description: The version number belonging to the oss binary to be used
commit:
required: true
type: string
description: The git SHA of the oss artifacts to be used
jobs:
trigger-gha-build-artifacts-for-testing:
runs-on: ubuntu-latest
steps:
- name: Release description
if: github.event_name == 'workflow_dispatch'
run: |
echo "Triggering Build Artifacts for Testing using BRANCH and TEST_TAG ${{ github.event.inputs.branch }}"
- name: Trigger Build Artifacts for Testing in boundary-ui-releases
run: |
export GITHUB_TOKEN="${{ secrets.ELEVATED_GITHUB_TOKEN }}"
gh workflow run build-artifacts-for-testing.yml \
--repo hashicorp/boundary-ui-releases \
--ref main \
-f TAG="${{ inputs.branch }}" \
-f PRODUCT_VERSION="${{ inputs.product_version }}" \
-f COMMIT="${{ inputs.commit }}" \
+6 -6
View File
@@ -17,7 +17,7 @@ on:
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
strategy:
fail-fast: false
@@ -27,18 +27,18 @@ jobs:
language: ['javascript']
# Learn more...
# https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
steps:
- name: Checkout repository
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@8f1a6fed33af5212fab8a999d004627ae8901d1b # codeql-bundle-v2.17.5
uses: github/codeql-action/init@70df9def86d22bf0ea4e7f8b956e7b92e7c1ea22 # codeql-bundle-v2.20.7
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
@@ -54,4 +54,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@8f1a6fed33af5212fab8a999d004627ae8901d1b # codeql-bundle-v2.17.5
uses: github/codeql-action/analyze@70df9def86d22bf0ea4e7f8b956e7b92e7c1ea22 # codeql-bundle-v2.20.7
+10 -5
View File
@@ -1,10 +1,15 @@
name: Check Copyright Headers
name: Add Copyright Headers
on: pull_request
jobs:
copywrite:
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
permissions:
contents: write
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: hashicorp/setup-copywrite@32638da2d4e81d56a0764aa1547882fc4d209636 # v1.1.3
- name: Check Header Compliance
run: copywrite headers --plan
- name: Add missing Copyright Headers
run: copywrite headers
- uses: stefanzweifel/git-auto-commit-action@778341af668090896ca464160c2def5d1d1a3eb0 # v6.0.1
with:
commit_message: Add missing copyright headers
+1 -1
View File
@@ -11,7 +11,7 @@ name: Jira Sync
jobs:
sync:
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
name: Jira sync
steps:
- name: Check if community user
+1 -1
View File
@@ -4,7 +4,7 @@ on:
jobs:
triage:
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
with:
+38 -38
View File
@@ -4,71 +4,71 @@ jobs:
dependencies:
name: Install dependencies
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
id: node-modules-cache
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
node-modules-
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
run_install: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
- run: yarn install
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --frozen-lockfile
compliance:
name: License Compliance
needs: [dependencies]
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
id: node-modules-cache
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
node-modules-
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
run_install: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
- run: yarn run compliance:licenses
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --offline
- run: pnpm run compliance:licenses
lint:
name: Lint
needs: [dependencies, compliance]
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
timeout-minutes: 5
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
id: node-modules-cache
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
node-modules-
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
run_install: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
- run: yarn lint
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --offline
- run: pnpm lint
test:
name: Test
needs: [lint]
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
timeout-minutes: 15
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
id: node-modules-cache
- uses: browser-actions/setup-chrome@c785b87e244131f27c9f19c1a33e2ead956ab7ce # v1.7.3
with:
path: '**/node_modules'
key: node-modules-${{ hashFiles('**/yarn.lock') }}
- uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
install-dependencies: true
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
run_install: false
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
- run: yarn test
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --offline
- run: pnpm test
+1 -1
View File
@@ -10,7 +10,7 @@ jobs:
trigger-oss-merge:
# Run this only on merge events in OSS repo
if: ${{ github.event.pull_request.merged && github.repository == 'hashicorp/boundary-ui' }}
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- name: Trigger Merge
env:
+2 -2
View File
@@ -4,10 +4,10 @@ on:
types: [ oss-merge ]
jobs:
oss-merge:
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
token: ${{ secrets.ELEVATED_GITHUB_TOKEN }}
- run: |
+115
View File
@@ -0,0 +1,115 @@
name: Test E2E Desktop Client
on:
pull_request:
types: [labeled, opened, synchronize, reopened]
workflow_dispatch:
jobs:
test:
if: ${{contains(github.event.pull_request.labels.*.name, 'desktop')}}
name: Run Desktop E2E Tests
runs-on: ubuntu-22.04
env:
ENOS_VAR_boundary_edition: "ent"
ENOS_VAR_e2e_debug_no_run: true
ENOS_VAR_boundary_license_path: "./license.hclic"
SETUP_CLI: true
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- name: Set up pnpm
uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
run_install: false
- name: Set up Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
cache: "pnpm"
cache-dependency-path: |
pnpm-lock.yaml
ui/desktop/electron-app/pnpm-lock.yaml
- name: Set up Terraform
uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd
- name: Set up Enos
uses: hashicorp/action-setup-enos@b9fa53484a1e8fdcc7b02a118bcf01d65b9414c9
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Vault CLI
run: |
wget https://releases.hashicorp.com/vault/1.12.2/vault_1.12.2_linux_amd64.zip -O /tmp/vault.zip
unzip /tmp/vault.zip -d /usr/local/bin
- name: Checkout boundary-enterprise
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: hashicorp/boundary-enterprise
# ref: ${{ github.event.inputs.boundary-enterprise-branch }}
path: support/src/boundary-enterprise
token: ${{ secrets.ELEVATED_GITHUB_TOKEN }}
- name: GH fix for localhost resolution
run: |
cat /etc/hosts && echo "-----------"
sudo sed -i 's/::1 *localhost ip6-localhost ip6-loopback/::1 ip6 -localhost ip6-loopback/g' /etc/hosts
cat /etc/hosts
ssh -V
echo "127.0.0.1 localhost boundary" | sudo tee -a /etc/hosts
echo "127.0.0.1 localhost worker" | sudo tee -a /etc/hosts
echo "127.0.0.1 localhost vault" | sudo tee -a /etc/hosts
# TODO: Build image ourselves in case we don't want to use latest?
- name: Get Boundary docker image
run: |
docker pull hashicorp/boundary-enterprise:latest
docker save hashicorp/boundary-enterprise:latest | gzip > /tmp/boundary-enterprise.zip
# TODO: Set up license in a better way? Use directly rather than writing to file and pull from secrets manager
- name: Set up test infra
id: infra
run: |
echo "${{ secrets.BOUNDARY_ENT_LICENSE }}" > ./support/src/boundary-enterprise/enos/license.hclic
ssh-keygen -N '' -t ed25519 -f ~/.ssh/github_enos
mkdir -p ./enos/terraform-plugin-cache
export ENOS_VAR_enos_user=$GITHUB_ACTOR && \
export ENOS_VAR_aws_ssh_private_key_path=~/.ssh/github_enos && \
export ENOS_VAR_boundary_docker_image_name=hashicorp/boundary-enterprise:latest && \
export ENOS_VAR_boundary_docker_image_file=/tmp/boundary-enterprise.zip && \
enos scenario launch --timeout 60m0s --chdir ./support/src/boundary-enterprise/enos e2e_ui_docker_ent builder:crt
- name: Install dependencies
run: |
pnpm install --frozen-lockfile
cd e2e-tests
pnpm playwright install --with-deps
# Runner is headless so we need to enable a display to run the client
- name: Run Tests
run: |
source <(bash ./support/src/boundary-enterprise/enos/scripts/test_e2e_env.sh)
cd e2e-tests
export DISPLAY=:99
sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
pnpm run desktop
- name: Upload Playwright report
if: ${{ failure() }}
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: playwright-report
path: e2e-tests/playwright-report
- name: Clean up test infra
if: ${{ always() }}
run: |
export ENOS_VAR_enos_user=$GITHUB_ACTOR && \
export ENOS_VAR_aws_ssh_private_key_path=~/.ssh/github_enos && \
enos scenario destroy --timeout 60m0s --chdir ./support/src/boundary-enterprise/enos e2e_ui_docker_ent builder:crt
@@ -1,25 +0,0 @@
name: "Trigger Test Boundary UI release"
on:
workflow_dispatch:
inputs:
branch:
description: Please use tag-like format n.n.n-someword (1.111.11-beta)
required: true
jobs:
trigger-gha-release:
runs-on: ubuntu-latest
steps:
- name: Release description
if: github.event_name == 'workflow_dispatch'
run: |
echo "Triggering Test release using BRANCH and TEST_TAG ${{ github.event.inputs.branch }}"
- name: Trigger Release workflow in boundary-ui-releases
run: |
export GITHUB_TOKEN="${{ secrets.ELEVATED_GITHUB_TOKEN }}"
gh workflow run release.yml \
--repo hashicorp/boundary-ui-releases \
--ref main \
-f TAG="${{ github.event.inputs.branch }}"
+5 -5
View File
@@ -1,4 +1,4 @@
name: "Trigger Boundary UI release"
name: "Trigger Boundary Desktop release"
on:
push:
@@ -7,16 +7,16 @@ on:
jobs:
trigger-gha-release:
runs-on: ubuntu-latest
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Release description
run: |
echo "Triggering release with a TAG ${GITHUB_REF#refs/tags/}"
- name: Trigger Release workflow in boundary-ui-releases
- name: Trigger Release workflow in boundary-desktop-releases
run: |
export GITHUB_TOKEN="${{ secrets.ELEVATED_GITHUB_TOKEN }}"
gh workflow run release.yml \
--repo hashicorp/boundary-ui-releases \
--repo hashicorp/boundary-desktop-releases \
--ref main \
-f TAG="${GITHUB_REF#refs/tags/}"
-1
View File
@@ -19,7 +19,6 @@ coverage-*
libpeerconnection.log
npm-debug.log*
testem.log
yarn-error.log
.watchman-cookie*
### VisualStudioCode ###
+2 -5
View File
@@ -1,5 +1,2 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
yarn compliance:licenses
npx lint-staged
pnpm compliance:licenses
pnpm lint-staged
-4
View File
@@ -1,6 +1,3 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3
@@ -24,4 +21,3 @@ else
# This is to allow interaction with the terminal for commitizen
exec < /dev/tty && npx git-cz --hook || true
fi
Binary file not shown.
+32 -31
View File
@@ -25,7 +25,7 @@ subproject, e.g. running or testing.
- [Prerequisites](#prerequisites)
- [Optional Tooling](#optional-tooling)
- [Installation](#installation)
- [Yarn Commands](#yarn-commands)
- [Pnpm Commands](#pnpm-commands)
- [Contributing](#contributing)
- [Branching](#branching)
- [Building ToC](#building-toc)
@@ -33,8 +33,8 @@ subproject, e.g. running or testing.
- [Building with a Container](#building-with-a-container)
- [Building Desktop UI for Production](#building-desktop-ui-for-production)
- [Connect Boundary UI to Boundary local instance](#connect-boundary-ui-to-boundary-local-instance)
- [For admin](#for-admin)
- [For desktop](#for-desktop)
- [For Admin](#for-admin)
- [For Desktop](#for-desktop)
- [Committing](#committing)
- [License Checking](#license-checking)
@@ -67,8 +67,8 @@ You will need the following things properly installed on your computer.
* [Git][git]
* [Node.js][node]
* Supported versions: `v18` and `v20`.
* [Yarn][yarn] installed globally
* Supported versions: `v20` and `v22`.
* [Pnpm][pnpm] installed globally
* [Google Chrome][chrome]
* [Firefox][firefox]
@@ -90,18 +90,18 @@ that best suit you and your personal style.
* `git clone <repository-url>` this repository
* `cd boundary-ui`
* `yarn install`
* `pnpm install`
## Yarn Commands
## Pnpm Commands
List of available project commands. `yarn run <command-name>`
List of available project commands. `pnpm run <command-name>`
| Command | Description |
|---------------------|---|
| build | Builds Admin UI. |
| build | Builds Admin UI for production. |
| test | Runs tests in CI mode. |
| lint | Runs ember-template-lint on all of the hbs, js, and sass files. |
| compliance:audit | Checks for issues using `yarn audit` with moderate and above criticality.|
| compliance:audit | Checks for issues using `pnpm audit` with moderate and above criticality.|
| compliance:licenses | Checks that all dependencies have OSS-compatible licenses. |
| doc:toc | Automatically generates a table of contents for the README file. |
@@ -114,20 +114,20 @@ We follow [GitHub Flow][github-flow].
### Building ToC
To autogenerate a ToC (table of contents) for this README,
run `yarn doc:toc`. Please update the ToC whenever editing the structure
run `pnpm doc:toc`. Please update the ToC whenever editing the structure
of README.
### Building Admin UI for Production
See ui/admin/README.md Building for Production for more information on how to
build the Admin UI. Be sure to set build-related environment variables as
necessary for your target environment, as described in the Admin UI readme.
See [Admin UI README](ui/admin/README.md#building-for-production) for more information on how to
build the Admin UI for production. Be sure to set build-related environment variables as
necessary for your target environment, as described in the [Environment Variables](ui/admin/README.md#environment-variables) section of README.
To quickly produce a production build of Admin UI, run from this folder:
```bash
yarn install
yarn build
pnpm install
pnpm build
```
Assets are saved to `ui/admin/dist/`.
@@ -144,27 +144,27 @@ Assets are saved to `ui/admin/dist/`.
### Building Desktop UI for Production
See ui/desktop/README.md Building for Production for more information on how to
See [Desktop UI README](ui/desktop/README.md#building-for-production) for more information on how to
build the Desktop UI. Be sure to set build-related environment variables as
necessary for your target environment, as described in the Desktop UI readme.
necessary for your target environment, as described in the [Environment Variables](ui/desktop/README.md#environment-variables-prod) section of README.
To quickly produce a production build of Desktop UI, run from this folder:
```bash
yarn install
yarn build:ui:desktop
pnpm install
pnpm build:ui:desktop
```
In windows, UI is generated using docker to provide a stable UI across platforms.
```cmd
yarn install
pnpm install
docker-compose -f docker-compose-embedding.yml run build-desktop-production
yarn build:ui:desktop:app
pnpm build:ui:desktop:app
```
To provide a signing identify for macOS build, use `BOUNDARY_DESKTOP_SIGNING_IDENTITY`
environment variable to set signing certificate name (e.g Developer ID Application: * (*)) when building desktop app using `yarn build:ui:desktop:app`.
environment variable to set signing certificate name (e.g Developer ID Application: * (*)) when building desktop app using `pnpm build:ui:desktop:app`.
Assets are saved to `ui/desktop/electron-app/out/make/`.
DMG packaged desktop UI is available at asset location as `boundary.dmg`.
@@ -174,22 +174,23 @@ EXE archived desktop UI is available at asset location under `zip` folder.
This describes how to connect local Boundary UI to your local instance of Boundary.
This assumes you already have up and running a Boundary dev instance in your local environment with a listener `127.0.0.1:9200` (default behaviour). [Learn how to start a local Boundary dev instance](https://learn.hashicorp.com/tutorials/boundary/getting-started-dev?in=boundary/getting-started#start-a-dev-environment).
#### For admin
This assumes you already have up and running a Boundary dev instance in your local environment with a listener `127.0.0.1:9200` (default behaviour). [Learn how to start a local Boundary dev instance](https://developer.hashicorp.com/boundary/tutorials/get-started-community/community-get-started-dev)
#### For Admin
This assumes you are within `boundary-ui/ui/admin`.
You will need to turn `off` mirage, tell the UI where to find Boundary and run it: `$ ENABLE_MIRAGE=false API_HOST=http://localhost:9200 yarn start`.
You will need to turn `off` mirage, tell the UI where to find Boundary and run it: `$ ENABLE_MIRAGE=false API_HOST=http://localhost:9200 pnpm start`.
Following terminal instructions, open in your browser: `http://localhost:4200/`.
Once you open the UI you will see the login screen, authenticate using generated admin login name and password.
#### For desktop
#### For Desktop
This assumes you are within `boundary-ui/ui/desktop`.
You will need to turn `off` mirage and run it: `$ ENABLE_MIRAGE=false yarn start:desktop`.
You will need to turn `off` mirage and run it: `$ ENABLE_MIRAGE=false pnpm start:desktop`.
In login screen, authenticate using generated admin login name and password.
@@ -198,7 +199,7 @@ Enter the cluster URL of your Boundary dev instance, by default is: `http://loca
### Committing
We use `husky` and `lint-staged` to ensure linting and other checks pass before a
commit is completed. Simply do a `yarn install` to make sure the hooks are installed.
commit is completed. Simply do a `pnpm install` to make sure the hooks are installed.
Use a normal `git commit` to go through the checks, if you need to skip these checks,
use `git commit --no-verify` to bypass them. However, a consistent commit message will
@@ -217,10 +218,10 @@ will not be accepted.
[git]: https://git-scm.com/
[node]: https://nodejs.org/
[yarn]: https://classic.yarnpkg.com/lang/en/
[pnpm]: https://pnpm.io
[chrome]: https://google.com/chrome/
[firefox]: https://firefox.com/
[yarn-workspaces]: https://classic.yarnpkg.com/en/docs/workspaces/
[pnpm-workspaces]: https://pnpm.io/workspaces
[homebrew]: https://brew.sh
[warp]: https://www.warp.dev
[vscode]: https://code.visualstudio.com/
+3 -3
View File
@@ -12,8 +12,8 @@ insert_final_newline = true
indent_style = space
indent_size = 2
[*.{diff,md}]
trim_trailing_whitespace = false
[*.hbs]
insert_final_newline = false
[*.{diff,md}]
trim_trailing_whitespace = false
-8
View File
@@ -1,12 +1,4 @@
{
/**
Ember CLI sends analytics information by default. The data is completely
anonymous, but there are times when you might want to disable this behavior.
Setting `disableAnalytics` to true will prevent any data from being sent.
*/
"disableAnalytics": false,
/**
Setting `isTypeScriptProject` to true will force the blueprint generators to generate TypeScript
rather than JavaScript by default, when a TypeScript version of a given blueprint is available.
+1 -12
View File
@@ -1,25 +1,14 @@
# unconventional js
/blueprints/*/files/
/vendor/
# compiled output
/declarations/
/dist/
/tmp/
# dependencies
/bower_components/
/node_modules/
# misc
/coverage/
!.*
.*/
.eslintcache
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
+1 -1
View File
@@ -56,7 +56,7 @@ module.exports = {
extends: ['plugin:n/recommended'],
},
{
// Test files:
// test files
files: ['tests/**/*-test.{js,ts}'],
extends: ['plugin:qunit/recommended'],
rules: {
+20
View File
@@ -0,0 +1,20 @@
# compiled output
/dist/
/declarations/
# dependencies
/node_modules/
# misc
/.env*
/.pnp*
/.eslintcache
/coverage/
/testem.log
# ember-try
/.node_modules.ember-try/
/package.json.ember-try
# broccoli-debug
/DEBUG/
+2 -12
View File
@@ -2,11 +2,7 @@
/dist/
/tmp/
# dependencies
/bower_components/
# misc
/.bowerrc
/.editorconfig
/.ember-cli
/.env*
@@ -19,21 +15,15 @@
/.prettierignore
/.prettierrc.js
/.template-lintrc.js
/.travis.yml
/.watchmanconfig
/bower.json
/CONTRIBUTING.md
/ember-cli-build.js
/testem.js
/tests/
/yarn-error.log
/yarn.lock
/tsconfig.declarations.json
/tsconfig.json
.gitkeep
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
+1 -13
View File
@@ -1,25 +1,13 @@
# unconventional js
/blueprints/*/files/
/vendor/
# compiled output
/dist/
/tmp/
# dependencies
/bower_components/
/node_modules/
# misc
/coverage/
!.*
.eslintcache
.lint-todo/
.*/
# ember-try
/.node_modules.ember-try/
/bower.json.ember-try
/npm-shrinkwrap.json.ember-try
/package.json.ember-try
/package-lock.json.ember-try
/yarn.lock.ember-try
+2
View File
@@ -3,6 +3,8 @@
* SPDX-License-Identifier: BUSL-1.1
*/
'use strict';
module.exports = {
overrides: [
{
+1 -1
View File
@@ -1,3 +1,3 @@
{
"ignore_dirs": ["tmp", "dist"]
"ignore_dirs": ["dist"]
}
+15 -15
View File
@@ -8,7 +8,7 @@ This addon contains the API data access layer for Boundary.
- [Add API to an App](#add-api-to-an-app)
- [Installation](#installation)
- [Yarn Commands](#yarn-commands)
- [Pnpm Commands](#pnpm-commands)
- [Linting](#linting)
- [Formatting](#formatting)
- [Running tests](#running-tests)
@@ -21,7 +21,7 @@ This addon contains the API data access layer for Boundary.
## Add API to an App
Add this addon to an Ember application's `devDependencies` as:
`"api": "*"`, for applications included in this monorepo.
`"api": "workspace:*"`, for applications included in this monorepo.
Since this addon also includes Mirage mocks, be sure to install
`ember-cli-mirage` and add the following config to your UI project:
@@ -38,9 +38,9 @@ See monorepo README for installation instructions.
When manually installing addon, ensure `ember-data-fragments@5.0.0-beta.*` is installed to use api models with data fragments.
## Yarn Commands
## Pnpm Commands
List of available project commands. `yarn run <command-name>`
List of available project commands. `pnpm run <command-name>`
| Command | Description |
| ------- | ----------- |
@@ -64,28 +64,28 @@ Additional commands in the monorepo package may affect this projects.
## Linting
* `yarn lint:fix`
* `yarn lint:hbs`
* `yarn lint:hbs:fix`
* `yarn lint:js`
* `yarn lint:js:fix`
* `pnpm lint:fix`
* `pnpm lint:hbs`
* `pnpm lint:hbs:fix`
* `pnpm lint:js`
* `pnpm lint:js:fix`
## Formatting
Before submitting your work, be sure to run auto-formatters
(see commands above). This helps to ensure consistency among authors.
* `yarn format`
* `pnpm format`
## Running tests
* `yarn test` – Runs the test suite on the current Ember version
* `yarn test --server` – Runs the test suite in "watch mode"
* `yarn test:all` – Runs the test suite against multiple Ember versions
* `pnpm test` – Runs the test suite on the current Ember version
* `pnpm test --server` – Runs the test suite in "watch mode"
* `pnpm test:all` – Runs the test suite against multiple Ember versions
## Running the dummy application
* `yarn start`
* `pnpm start`
* Visit the dummy application at [http://localhost:4200](http://localhost:4200).
## Contributing
@@ -95,5 +95,5 @@ See monorepo README for more contribution instructions.
### Building ToC
To autogenerate a ToC (table of contents) for this README,
run `yarn doc:toc`. Please update the ToC whenever editing the structure
run `pnpm doc:toc`. Please update the ToC whenever editing the structure
of README.
@@ -7,6 +7,7 @@ import sinon from 'sinon';
import { typeOf } from '@ember/utils';
import { resourceNames } from 'api/handlers/cache-daemon-handler';
import { singularize } from 'ember-inflector';
import { underscore } from '@ember/string';
/**
* This test helper can be used to help setup your sinon stubs in your tests.
@@ -69,16 +70,18 @@ export default function setupStubs(hooks) {
.withArgs('searchCacheDaemon')
.onCall(i)
.returns({
[resourceName]: models.map((model) => {
// Use internal serializer to serialize the model correctly
// according to our mirage serializers
const modelData =
this.server.serializerOrRegistry.serialize(model);
[underscore(resourceNames[singularize(resourceName)])]: models.map(
(model) => {
// Use internal serializer to serialize the model correctly
// according to our mirage serializers
const modelData =
this.server.serializerOrRegistry.serialize(model);
// Serialize the data properly to standard JSON as that is what
// we're expecting from the cache daemon response
return JSON.parse(JSON.stringify(modelData));
}),
// Serialize the data properly to standard JSON as that is what
// we're expecting from the cache daemon response
return JSON.parse(JSON.stringify(modelData));
},
),
});
});
};
@@ -20,9 +20,9 @@
* @param hooks
*/
export function setupIndexedDb(hooks) {
hooks.beforeEach(function () {
hooks.beforeEach(async function () {
const indexedDb = this.owner.lookup('service:indexed-db');
indexedDb.setup(`test-indexed-db-${Date.now()}`);
await indexedDb.setup(`test-indexed-db-${Date.now()}`);
});
hooks.afterEach(async function () {
@@ -4,7 +4,7 @@
*/
import ModelAbility from './model';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
/**
* Provides abilities for channel recordings.
@@ -4,7 +4,7 @@
*/
import ModelAbility from './model';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
/**
* Provides abilities for credential store.
*/
+1 -1
View File
@@ -4,7 +4,7 @@
*/
import ModelAbility from './model';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
class InvalidRolePrincipalTypeError extends Error {
name = 'InvalidRolePrincipalTypeError';
+9 -6
View File
@@ -115,7 +115,7 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
* @return {Promise} promise
*/
async query(store, schema, query) {
const queryObject = structuredClone(query);
const { batchLimit, ...queryObject } = query;
let result;
let data = [];
@@ -126,8 +126,10 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
result = await super.query(store, schema, query);
return prenormalizeArrayResponse(result);
}
// Run this loop as long as the response_type is delta,
// which indicates that there are more items in the list
// or the batch size has not been reached
do {
result = await super.query(store, schema, queryObject);
//add the result items to a data array
@@ -136,7 +138,10 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
//pass in the list token for subsequent calls to fetch the remaining list items
queryObject.list_token = result.list_token;
}
} while (result && result.response_type === 'delta');
} while (
result?.response_type === 'delta' &&
(!batchLimit || data.length < batchLimit)
);
result.items = data;
return prenormalizeArrayResponse(result);
@@ -163,7 +168,7 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
}
/**
* Overrides default ajax method by rewritting PUT requests as PATCH.
* Overrides default ajax method by rewriting PUT requests as PATCH.
* PATCH is the request method used by our API for updates.
*
* @override
@@ -291,9 +296,7 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
const errors = fieldErrors.map((error) => ({
detail: error.description,
// Going forward, nested attributes will be hoisted. Thus "attributes."
// must be stripped from the error name key. Until all models are
// transitioned away from model fragments, however, both this and the
// prior error key mappings are necessary.
// must be stripped from the error name key.
source: {
pointer: `/data/attributes/${error.name.replace('attributes.', '')}`,
},
@@ -55,63 +55,224 @@ export default class GeneratedHostCatalogModel extends BaseModel {
})
plugin;
// AWS & Azure
// AWS, Azure & GCP
@attr('boolean', {
for: {
type: 'plugin',
name: ['aws', 'azure', 'gcp'],
},
isNestedAttribute: true,
description: '',
})
disable_credential_rotation;
// AWS and GCP specific
@attr('string', {
for: {
type: 'plugin',
name: ['aws', 'gcp'],
},
description:
'An expression used to filter the workers that have network access to a service that is hosting the external object store.',
})
worker_filter;
// AWS specific
@attr('string', {
for: {
type: 'plugin',
name: 'aws',
},
isNestedAttribute: true,
description: '',
})
region;
// AWS static credentials
@attr('string', {
for: {
type: 'plugin',
name: 'aws',
credentialType: 'static-credential',
},
isNestedSecret: true,
description: '',
})
access_key_id;
@attr('string', {
for: {
type: 'plugin',
name: 'aws',
credentialType: 'static-credential',
},
isNestedSecret: true,
description: '',
})
secret_access_key;
// AWS dynamic credentials
@attr('string', {
for: {
type: 'plugin',
name: 'aws',
credentialType: 'dynamic-credential',
},
isNestedAttribute: true,
description: 'The role ARN to use.',
})
role_arn;
@attr('string', {
for: {
type: 'plugin',
name: 'aws',
credentialType: 'dynamic-credential',
},
isNestedAttribute: true,
description: 'The role external ID to use.',
})
role_external_id;
@attr('string', {
for: {
type: 'plugin',
name: 'aws',
credentialType: 'dynamic-credential',
},
isNestedAttribute: true,
description: 'The role session to use.',
})
role_session_name;
@attr('object-as-array', {
for: {
type: 'plugin',
name: 'aws',
credentialType: 'dynamic-credential',
},
isNestedAttribute: true,
description: 'The role tags to use.',
})
role_tags;
// Azure specific
@attr('string', {
for: {
type: 'plugin',
name: 'azure',
},
isNestedAttribute: true,
description: '',
})
tenant_id;
@attr('string', {
for: {
type: 'plugin',
name: 'azure',
},
isNestedAttribute: true,
description: '',
})
client_id;
@attr('string', {
for: {
type: 'plugin',
name: 'azure',
},
isNestedAttribute: true,
description: '',
})
subscription_id;
@attr('string', {
for: {
type: 'plugin',
name: 'azure',
},
isNestedSecret: true,
description: '',
})
secret_id;
@attr('string', {
for: {
type: 'plugin',
name: 'azure',
},
isNestedSecret: true,
description: '',
})
secret_value;
// GCP specific
@attr('string', {
for: {
type: 'plugin',
name: 'gcp',
},
isNestedAttribute: true,
description: 'The project ID associated with the service account.',
})
project_id;
@attr('string', {
for: {
type: 'plugin',
name: 'gcp',
},
isNestedAttribute: true,
description: 'The deployment area within a region.',
})
zone;
@attr('string', {
for: {
type: 'plugin',
name: 'gcp',
},
isNestedAttribute: true,
description:
'The email address associated with the service account. The email address used to uniquely identify the service account. It is required for authentication and authorization.',
})
client_email;
@attr('string', {
for: {
type: 'plugin',
name: 'gcp',
},
isNestedAttribute: true,
description:
'The unique identifier for the service account that will be impersonated.',
})
target_service_account_id;
@attr('string', {
for: {
type: 'plugin',
name: 'gcp',
},
description:
'The ID of the private key used to sign the JWT and authentication.',
isNestedSecret: true,
})
private_key_id;
@attr('string', {
for: {
type: 'plugin',
name: 'gcp',
},
description:
'The private key used to sign the JWT and obtain a OAuth 2.0 access token.',
isNestedSecret: true,
})
private_key;
}
+18 -1
View File
@@ -63,6 +63,10 @@ export default class GeneratedHostSetModel extends BaseModel {
plugin;
@attr('number', {
for: {
type: 'plugin',
name: ['aws', 'azure', 'gcp'],
},
description:
"The number of seconds between the time boundary syncs the hosts in this set using this host set's plugin. If not provided a system determined default is used",
})
@@ -79,12 +83,21 @@ export default class GeneratedHostSetModel extends BaseModel {
host_ids;
@attr('string-array', {
for: {
type: 'plugin',
name: ['aws', 'azure', 'gcp'],
},
emptyArrayIfMissing: true,
trimWhitespace: true,
})
preferred_endpoints;
// AWS specific
// AWS & GCP specific
@attr('string-array', {
for: {
type: 'plugin',
name: ['aws', 'gcp'],
},
isNestedAttribute: true,
emptyArrayIfMissing: true,
})
@@ -92,6 +105,10 @@ export default class GeneratedHostSetModel extends BaseModel {
// Azure specific, comes in from API as "filter". This is to avoid collisions with filter
@attr('string', {
for: {
type: 'plugin',
name: 'azure',
},
description: '',
isNestedAttribute: true,
})
@@ -70,6 +70,7 @@ export default class GeneratedStorageBucketModel extends BaseModel {
@attr('string', {
isNestedAttribute: true,
description: 'The AWS region to use.',
trimWhitespace: true,
})
region;
@@ -109,6 +110,7 @@ export default class GeneratedStorageBucketModel extends BaseModel {
@attr('string', {
isNestedAttribute: true,
description: 'The role ARN to use.',
trimWhitespace: true,
})
role_arn;
@@ -3,11 +3,13 @@
* SPDX-License-Identifier: BUSL-1.1
*/
/* global __electronLog */
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
import { getOwner, setOwner } from '@ember/application';
import { generateMQLExpression } from '../utils/mql-query';
import { paginateResults } from '../utils/paginate-results';
import { underscore } from '@ember/string';
const { __electronLog } = globalThis;
/**
* Not all types are yet supported by the cache daemon so we'll
@@ -41,7 +43,10 @@ const fetchControllerData = async (context, next) => {
// If we get an error or cache daemon is unavailable, fall back to calling the API
context.request.data.query = remainingQuery;
const results = await next(context.request);
const models = results.content.toArray();
// As a result of https://rfcs.emberjs.com/id/0846-ember-data-deprecate-proxies/ we cannot use proxy array methods like .toArray
// use slice() instead as indicated in the RFC.
const models = results.content.slice();
const paginatedResult = paginateResults(models, page, pageSize);
paginatedResult.meta = { totalItems: models.length };
@@ -94,12 +99,14 @@ export default class CacheDaemonHandler {
const sessionData = this.session.data?.authenticated;
const auth_token_id = sessionData?.id;
const token = sessionData?.token;
const resourceName = resourceNames[type];
remainingQuery = {
...remainingQuery,
query: searchQuery,
auth_token_id,
token,
resource: resourceNames[type],
resource: resourceName,
};
let cacheDaemonResults = {};
@@ -130,7 +137,7 @@ export default class CacheDaemonHandler {
}
} else {
__electronLog?.error(
'Failed to search cache daemon; falling back to search controller',
`Failed to search cache daemon for ${resourceName}. Error:`,
e.message,
);
@@ -138,10 +145,7 @@ export default class CacheDaemonHandler {
}
}
// Currently returns with a singular top level field with resource name
// e.g. { targets: [...] } or { sessions: [..] }
// So this just unwraps to the array, or undefined
const [results] = Object.values(cacheDaemonResults);
const results = cacheDaemonResults[underscore(resourceName)];
const payload = { items: paginateResults(results, page, pageSize) };
const schema = store.modelFor(type);
@@ -167,7 +171,16 @@ export default class CacheDaemonHandler {
// This isn't conventional but is better than returning an ArrayProxy
// or EmberArray since the ember store query method asserts it has to be an array
// so we can't just return an object.
records.meta = { totalItems: results?.length ?? 0 };
// Also include whether the results are incomplete or is still refreshing
// as part of the response
records.meta = {
totalItems: results?.length ?? 0,
isLoadIncomplete: cacheDaemonResults.incomplete ?? false,
// Sometimes the refresh status returns an error status if it takes too long but it's still refreshing
isCacheRefreshing:
cacheDaemonResults.refresh_status !== 'not-refreshing',
};
return records;
}
default:
+155 -85
View File
@@ -4,10 +4,11 @@
*/
import { modelIndexes } from 'api/services/indexed-db';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
import { getOwner, setOwner } from '@ember/application';
import { queryIndexedDb } from '../utils/indexed-db-query';
import { paginateResults } from '../utils/paginate-results';
import { sortResults } from '../utils/sort-results';
import { hashCode } from '../utils/hash-code';
/**
@@ -17,11 +18,15 @@ import { hashCode } from '../utils/hash-code';
export default class IndexedDbHandler {
@service indexedDb;
batchLimit = 10_000;
constructor(context) {
setOwner(this, getOwner(context));
}
async request(context, next) {
const { batchLimit } = this;
switch (context.request.op) {
case 'query': {
const { store, data } = context.request;
@@ -52,111 +57,89 @@ export default class IndexedDbHandler {
if (!peekIndexedDB) {
const tokenKey = `${type}-${hashCode(remainingQuery)}`;
let payload;
let listToken;
let writeToIndexedDbPromise;
if (storeToken) {
listToken = await indexedDb.token.get(tokenKey);
const tokenObj = await indexedDb.token.get(tokenKey);
listToken = tokenObj?.token;
}
let payload;
try {
payload = await adapter.query(store, schema, {
...remainingQuery,
list_token: listToken?.token,
});
} catch (e) {
// If we get an invalid list token, we'll delete the token and
// clear the DB and try again without a token.
if (
e?.errors[0].status === 400 &&
e?.errors[0].code === 'invalid list token'
) {
await indexedDb[type].clear();
// Delete all tokens of the same resource type so we don't keep clearing the DB.
// Even if other tokens may still be valid, we might have cleared data that they
// depended on so we should clear all tokens of the same type when clearing the DB.
const tokenKeys = await indexedDb.token
.where(':id')
.startsWith(type)
.primaryKeys();
await indexedDb.token.bulkDelete(tokenKeys);
do {
try {
payload = await adapter.query(store, schema, {
...remainingQuery,
list_token: listToken,
batchLimit: batchLimit,
});
// await the previous writeToIndexedDbPromise before writing to indexedDb again
if (writeToIndexedDbPromise) {
await writeToIndexedDbPromise;
}
} catch (err) {
payload = await this.retryQueryFailure({
err,
indexedDb,
type,
adapter,
store,
schema,
remainingQuery,
});
} else {
throw e;
}
}
listToken = payload.list_token;
// Store the token we just got back from the payload if it exists
if (payload.list_token && storeToken) {
await indexedDb.token.put({
id: tokenKey,
token: payload.list_token,
});
}
// Remove any records from the DB if the API indicates they've been deleted
if (payload.removed_ids?.length > 0) {
await indexedDb[type].bulkDelete(payload.removed_ids);
}
// This is a temporary fix of clearing the DB (specifically for auth-methods)
// since we are not storing the token we do not get back a list of removed_ids
// from the API call and we do not want deleted items from showing in list view.
if (!storeToken) {
await indexedDb[type].clear();
}
const normalizedPayload = serializer.normalizeResponse(
store,
schema,
payload,
null,
'query',
);
const { data: payloadData } = normalizedPayload;
// Store the new data we just got back from the API refresh
const items = payloadData.map((datum) =>
this.indexedDb.normalizeData({
data: datum,
cleanData: true,
schema,
// Don't await immediately and let the next query run while we write to indexedDb
writeToIndexedDbPromise = this.writeToIndexedDb({
payload,
storeToken,
indexedDb,
tokenKey,
type,
serializer,
}),
);
store,
schema,
});
} while (payload.response_type === 'delta');
await indexedDb[type].bulkPut(items);
await writeToIndexedDbPromise;
}
// Results returned in JSON API reponse, but in a format optimized for indexedDb
const indexedDbResults = await queryIndexedDb(
indexedDb,
type,
queryObj,
);
const dbRecords = paginateResults(indexedDbResults, page, pageSize).map(
(item) =>
this.indexedDb.normalizeData({
data: item,
cleanData: false,
schema,
serializer,
}),
);
// Normalize the results and clean up indexedDb format, ready for ember data consumption
const normalizedResults = indexedDbResults.map((item) => {
return this.indexedDb.normalizeData({
data: item,
cleanData: false,
schema,
serializer,
});
});
// Return the raw data if we don't push to the store.
let records = dbRecords.map((record) => ({
...record.attributes,
id: record.id,
}));
// Sort the results
const sortedResults = sortResults(normalizedResults, {
querySort: queryObj?.sort,
schema,
});
if (pushToStore) {
records = store.push({ data: dbRecords });
}
// Paginate the results
const paginatedResults = paginateResults(sortedResults, page, pageSize);
// If we are not pushing to the store, use the raw data with id property
const records = pushToStore
? store.push({ data: paginatedResults })
: paginatedResults.map((record) => ({
...record.attributes,
id: record.id,
}));
// Set a meta property on the array to store the total items of the results.
// This isn't conventional but is better than returning an ArrayProxy
@@ -169,4 +152,91 @@ export default class IndexedDbHandler {
return next(context.request);
}
}
async retryQueryFailure({
err,
indexedDb,
type,
adapter,
store,
schema,
remainingQuery,
}) {
// If we get an invalid list token, we'll delete the token and
// clear the DB and try again without a token.
if (
err?.errors[0].status === 400 &&
err?.errors[0].code === 'invalid list token'
) {
await indexedDb[type].clear();
// Delete all tokens of the same resource type so we don't keep clearing the DB.
// Even if other tokens may still be valid, we might have cleared data that they
// depended on so we should clear all tokens of the same type when clearing the DB.
const tokenKeys = await indexedDb.token
.where(':id')
.startsWith(type)
.primaryKeys();
await indexedDb.token.bulkDelete(tokenKeys);
return await adapter.query(store, schema, {
...remainingQuery,
});
} else {
throw err;
}
}
async writeToIndexedDb({
payload,
storeToken,
indexedDb,
tokenKey,
type,
serializer,
store,
schema,
}) {
// Store the token we just got back from the payload if it exists
if (payload.list_token && storeToken) {
await indexedDb.token.put({
id: tokenKey,
token: payload.list_token,
});
}
// Remove any records from the DB if the API indicates they've been deleted
if (payload.removed_ids?.length > 0) {
await indexedDb[type].bulkDelete(payload.removed_ids);
}
// This is a temporary fix of clearing the DB (specifically for auth-methods)
// since we are not storing the token we do not get back a list of removed_ids
// from the API call and we do not want deleted items from showing in list view.
if (!storeToken) {
await indexedDb[type].clear();
}
const normalizedPayload = serializer.normalizeResponse(
store,
schema,
payload,
null,
'query',
);
const { data: payloadData } = normalizedPayload;
// Store the new data we just got back from the API refresh
const items = payloadData.map((datum) =>
this.indexedDb.normalizeData({
data: datum,
cleanData: true,
schema,
serializer,
}),
);
await indexedDb[type].bulkPut(items);
}
}
@@ -1,27 +0,0 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { registerDeprecationHandler } from '@ember/debug';
const deprecationList = ['ember-data:deprecate-early-static'];
export function initialize() {
registerDeprecationHandler((message, options, next) => {
// TODO: Remove deprecation handling for `deprecate-early-static` warning
// once we upgrade to ember-cli-mirage v3.0.0 which fixes this issue.
// More info about this issue here: https://github.com/miragejs/ember-cli-mirage/issues/2441
if (options?.id && deprecationList.includes(options.id)) {
return;
}
if (options?.url) {
message += options.url;
}
next(message, options);
});
}
export default {
initialize,
};
+2 -2
View File
@@ -6,7 +6,7 @@
import Mixin from '@ember/object/mixin';
/**
* Overrides URL-building methods in an adpater for greater flexibility.
* Overrides URL-building methods in an adapter for greater flexibility.
* Specifically enhances calls to `urlPrefix` with `modelName`, `id`, and
* `snapshot`, which aren't normally passed. And adds support for a
* `urlSuffix` method, the return value of which is appended to the end of
@@ -22,7 +22,7 @@ export default Mixin.create({
/**
* This override behaves identically to the default method by default.
* It exists only to document the additional paramters to the method.
* It exists only to document the additional parameters to the method.
* @override
* @param {string} path
* @param {string} parentURL
+2 -2
View File
@@ -47,8 +47,8 @@ export default class AccountModel extends GeneratedAccountModel {
* @type {string}
*/
get accountName() {
const { email, full_name, login_name } = this;
return email || full_name || login_name;
const { email, full_name, login_name, subject } = this;
return email || full_name || login_name || subject;
}
// =methods
+1 -1
View File
@@ -6,7 +6,7 @@
import Model from '@ember-data/model';
import { attr } from '@ember-data/model';
import { computed } from '@ember/object';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
/**
* Base model class provides common functionality for all models.
+12 -3
View File
@@ -8,7 +8,16 @@ import GeneratedCredentialModel from '../generated/models/credential';
/**
* Supported Credential types.
*/
export const types = ['username_password', 'ssh_private_key', 'json'];
export const TYPE_CREDENTIAL_USERNAME_PASSWORD = 'username_password';
export const TYPE_CREDENTIAL_SSH_PRIVATE_KEY = 'ssh_private_key';
export const TYPE_CREDENTIAL_JSON = 'json';
export const TYPES_CREDENTIAL = Object.freeze([
TYPE_CREDENTIAL_USERNAME_PASSWORD,
TYPE_CREDENTIAL_SSH_PRIVATE_KEY,
TYPE_CREDENTIAL_JSON,
]);
export default class CredentialModel extends GeneratedCredentialModel {
// =attributes
@@ -28,7 +37,7 @@ export default class CredentialModel extends GeneratedCredentialModel {
* @type {boolean}
*/
get isJSON() {
return this.type === 'json';
return this.type === TYPE_CREDENTIAL_JSON;
}
/**
@@ -36,6 +45,6 @@ export default class CredentialModel extends GeneratedCredentialModel {
* @type {boolean}
*/
get isUnknown() {
return !types.includes(this.type);
return !TYPES_CREDENTIAL.includes(this.type);
}
}
+1 -1
View File
@@ -7,7 +7,7 @@ import GeneratedGroupModel from '../generated/models/group';
import { attr } from '@ember-data/model';
import { computed } from '@ember/object';
import { A } from '@ember/array';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
export default class GroupModel extends GeneratedGroupModel {
// =services
+54 -2
View File
@@ -4,6 +4,7 @@
*/
import GeneratedHostCatalogModel from '../generated/models/host-catalog';
import { tracked } from '@glimmer/tracking';
export const TYPE_HOST_CATALOG_STATIC = 'static';
export const TYPE_HOST_CATALOG_DYNAMIC = 'plugin';
@@ -14,14 +15,34 @@ export const TYPES_HOST_CATALOG = Object.freeze([
export const TYPE_HOST_CATALOG_PLUGIN_AWS = 'aws';
export const TYPE_HOST_CATALOG_PLUGIN_AZURE = 'azure';
export const TYPE_HOST_CATALOG_PLUGIN_GCP = 'gcp';
export const TYPES_HOST_CATALOG_PLUGIN = [
TYPE_HOST_CATALOG_PLUGIN_AWS,
TYPE_HOST_CATALOG_PLUGIN_AZURE,
TYPE_HOST_CATALOG_PLUGIN_GCP,
];
export const TYPE_CREDENTIAL_STATIC = 'static-credential';
export const TYPE_CREDENTIAL_DYNAMIC = 'dynamic-credential';
export const TYPES_CREDENTIALS = Object.freeze([
TYPE_CREDENTIAL_STATIC,
TYPE_CREDENTIAL_DYNAMIC,
]);
export const DYNAMIC_CREDENTIAL_FIELDS = [
'role_arn',
'role_external_id',
'role_session_name',
'role_tags',
];
export const STATIC_CREDENTIAL_FIELDS = ['access_key_id, secret_access_key'];
export default class HostCatalogModel extends GeneratedHostCatalogModel {
// =attributes
@tracked _credentialTypeValue;
/**
* True if the host catalog is static.
* @type {boolean}
@@ -38,6 +59,29 @@ export default class HostCatalogModel extends GeneratedHostCatalogModel {
return this.type === 'plugin';
}
/**
* Gets a value from credentialType
* @type {string}
*/
get credentialType() {
if (!this._credentialTypeValue) {
if (DYNAMIC_CREDENTIAL_FIELDS.some((field) => this[field])) {
return TYPE_CREDENTIAL_DYNAMIC;
} else {
return TYPE_CREDENTIAL_STATIC;
}
}
return this._credentialTypeValue;
}
/**
* Sets a value to credentialType
* @type {string}
*/
set credentialType(type) {
this._credentialTypeValue = type;
}
/**
* True if the host catalog is an unknown type.
* @type {boolean}
@@ -53,7 +97,7 @@ export default class HostCatalogModel extends GeneratedHostCatalogModel {
* @type {boolean}
*/
get isAWS() {
return this.compositeType === 'aws';
return this.compositeType === TYPE_HOST_CATALOG_PLUGIN_AWS;
}
/**
@@ -61,7 +105,15 @@ export default class HostCatalogModel extends GeneratedHostCatalogModel {
* @type {boolean}
*/
get isAzure() {
return this.compositeType === 'azure';
return this.compositeType === TYPE_HOST_CATALOG_PLUGIN_AZURE;
}
/**
* True if host catalog plugin type is GCP.
* @type {boolean}
*/
get isGCP() {
return this.compositeType === TYPE_HOST_CATALOG_PLUGIN_GCP;
}
/**
+16 -3
View File
@@ -4,7 +4,12 @@
*/
import GeneratedHostSetModel from '../generated/models/host-set';
import { TYPES_HOST_CATALOG_PLUGIN } from './host-catalog';
import {
TYPES_HOST_CATALOG_PLUGIN,
TYPE_HOST_CATALOG_PLUGIN_GCP,
TYPE_HOST_CATALOG_PLUGIN_AWS,
TYPE_HOST_CATALOG_PLUGIN_AZURE,
} from './host-catalog';
export default class HostSetModel extends GeneratedHostSetModel {
// =attributes
@@ -40,14 +45,22 @@ export default class HostSetModel extends GeneratedHostSetModel {
* @type {boolean}
*/
get isAWS() {
return this.compositeType === 'aws';
return this.compositeType === TYPE_HOST_CATALOG_PLUGIN_AWS;
}
/**
* Return if a host-set plugin is Azure or not.
*/
get isAzure() {
return this.compositeType === 'azure';
return this.compositeType === TYPE_HOST_CATALOG_PLUGIN_AZURE;
}
/**
* True if host catalog plugin type is GCP.
* @type {boolean}
*/
get isGCP() {
return this.compositeType === TYPE_HOST_CATALOG_PLUGIN_GCP;
}
/**
+1 -1
View File
@@ -5,7 +5,7 @@
import GeneratedRoleModel from '../generated/models/role';
import { attr } from '@ember-data/model';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
export const GRANT_SCOPE_THIS = 'this';
export const GRANT_SCOPE_CHILDREN = 'children';
+10 -2
View File
@@ -5,7 +5,7 @@
import GeneratedSessionRecordingModel from '../generated/models/session-recording';
import { hasMany } from '@ember-data/model';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
export const TYPE_SESSION_RECORDING_SSH = 'ssh';
export const TYPES_SESSION_RECORDING = Object.freeze([
@@ -71,7 +71,15 @@ export default class SessionRecordingModel extends GeneratedSessionRecordingMode
}
/**
* Reapply policy dates via the `reapply-staorage-policy` method.
* Returns true if retention of session-recording is forever.
* @type {boolean}
*/
get retainForever() {
return this.retain_until?.toISOString() === '9999-12-31T23:23:23.999Z';
}
/**
* Reapply policy dates via the `reapply-storage-policy` method.
* @param {object} options
* @param {object} options.adapterOptions
* @return {Promise}
+44 -7
View File
@@ -7,7 +7,10 @@ import GeneratedSessionModel from '../generated/models/session';
import { equal } from '@ember/object/computed';
import { tracked } from '@glimmer/tracking';
import { A } from '@ember/array';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
import { flattenObject } from '../utils/flatten-nested-object';
import { TYPES_CREDENTIAL_LIBRARY } from 'api/models/credential-library';
import { TYPE_CREDENTIAL_JSON } from 'api/models/credential';
export const STATUS_SESSION_ACTIVE = 'active';
export const STATUS_SESSION_PENDING = 'pending';
@@ -23,7 +26,7 @@ export const statusTypes = [
/**
*
*/
class SessionCredential {
export class SessionCredential {
// =classes
/**
@@ -34,12 +37,14 @@ class SessionCredential {
name;
description;
type;
credentialtype;
constructor(id, name, description, type) {
constructor(id, name, description, type, credentialtype) {
this.id = id;
this.name = name;
this.description = description;
this.type = type;
this.credentialType = credentialtype;
}
};
@@ -75,8 +80,10 @@ class SessionCredential {
get secrets() {
if (this.#payloadSecret?.decoded) {
const secretJSON = this.#payloadSecret.decoded;
return Object.keys(secretJSON).map(
(key) => new SessionCredential.SecretItem(key, secretJSON[key]),
return this.extractSecrets(
secretJSON,
this.source.type,
this.source.credentialType,
);
} else {
// decode from base64
@@ -85,11 +92,41 @@ class SessionCredential {
}
}
/**
* Extracts secrets from the payload secret JSON object.
* We only need to flatten the object if the type is vault or if its a json type credential.
* @param {object} secretJSON - The payload secret JSON object.
* @param {string} type - The credential source type.
* @param {string} credentialType - The credential type.
* @returns {SessionCredential.SecretItem[]} - The array of secret items.
*/
extractSecrets(secretJSON, type, credentialType) {
let source;
if (credentialType === TYPE_CREDENTIAL_JSON) {
source = flattenObject(secretJSON);
} else if (TYPES_CREDENTIAL_LIBRARY.includes(type) && secretJSON?.data) {
source = flattenObject(secretJSON.data);
} else {
source = secretJSON;
}
return Object.entries(source).map(
([key, value]) => new SessionCredential.SecretItem(key, value),
);
}
// =methods
constructor(cred) {
const { id, name, description, type } = cred.credential_source;
this.source = new SessionCredential.Source(id, name, description, type);
const { id, name, description, type, credential_type } =
cred.credential_source;
this.source = new SessionCredential.Source(
id,
name,
description,
type,
credential_type,
);
this.#payloadSecret = cred.secret;
this.rawCredential = cred;
}
+9 -6
View File
@@ -4,6 +4,7 @@
*/
import GeneratedStorageBucketModel from '../generated/models/storage-bucket';
import { tracked } from '@glimmer/tracking';
export const TYPE_STORAGE_BUCKET_PLUGIN = 'plugin';
export const TYPES_STORAGE_BUCKET = Object.freeze([TYPE_STORAGE_BUCKET_PLUGIN]);
@@ -26,7 +27,8 @@ export const TYPES_CREDENTIALS = Object.freeze([
export default class StorageBucketModel extends GeneratedStorageBucketModel {
// attributes
#credentialType;
@tracked _credentialTypeValue;
/**
* True if the storage bucket is a plugin.
* @type {boolean}
@@ -40,14 +42,14 @@ export default class StorageBucketModel extends GeneratedStorageBucketModel {
* @type {string}
*/
get credentialType() {
if (!this.#credentialType) {
if (!this._credentialTypeValue) {
if (this.role_arn) {
this.#credentialType = TYPE_CREDENTIAL_DYNAMIC;
return TYPE_CREDENTIAL_DYNAMIC;
} else {
this.#credentialType = TYPE_CREDENTIAL_STATIC;
return TYPE_CREDENTIAL_STATIC;
}
}
return this.#credentialType;
return this._credentialTypeValue;
}
/**
@@ -55,8 +57,9 @@ export default class StorageBucketModel extends GeneratedStorageBucketModel {
* @type {string}
*/
set credentialType(type) {
this.#credentialType = type;
this._credentialTypeValue = type;
}
/**
* True if the storage bucket is an unknown type.
* @type {boolean}
+1 -1
View File
@@ -5,7 +5,7 @@
import GeneratedTargetModel from '../generated/models/target';
import { attr } from '@ember-data/model';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
export const TYPE_TARGET_TCP = 'tcp';
export const TYPE_TARGET_SSH = 'ssh';
+51 -22
View File
@@ -6,6 +6,7 @@
import RESTSerializer from '@ember-data/serializer/rest';
import { underscore } from '@ember/string';
import { get } from '@ember/object';
import { typeOf } from '@ember/utils';
/**
* Manages serialization/normalization of data to/from the API.
@@ -42,7 +43,7 @@ export default class ApplicationSerializer extends RESTSerializer {
*/
serializeAttribute(snapshot, json, key, attribute) {
const { type, options } = attribute;
const { type: recordType } = snapshot.record;
const { type: recordType, compositeType } = snapshot.record;
let value = super.serializeAttribute(...arguments);
// Remove secret attributes that are null or empty
if (options.isSecret) {
@@ -59,6 +60,18 @@ export default class ApplicationSerializer extends RESTSerializer {
// Do not serialize `disabled` fields.
// TODO: disabled is temporarily disabled
if (key === 'disabled') delete json[key];
// Before we transform our json
// Let's trim the values in the json obj
// Currently, json values will only ever be a string or an array
if (options.trimWhitespace && json[key]) {
if (typeOf(json[key]) === 'array') {
json[key] = json[key].map((str) => str.trim());
} else if (typeOf(json[key] === 'string')) {
json[key] = json[key].trim();
}
}
// Push nested attributes down into the attributes key
if (options.isNestedAttribute && json[key] !== undefined) {
if (!json.attributes) json.attributes = {};
@@ -74,18 +87,38 @@ export default class ApplicationSerializer extends RESTSerializer {
delete json[key];
}
// If an attribute has a `for` option, it must match the
// record's `type`, else the attribute is excluded
// record's `type`, otherwise the attribute is excluded
// from serialization.
//note: This doesn't handle secrets yet, we can add support for them if needed.
if (
options?.for &&
options.for !== recordType &&
!options.for.includes(recordType)
) {
if (options.isNestedAttribute) {
delete json?.attributes?.[key];
} else {
delete json[key];
if (options?.for) {
// Check the typeof the `for` option to determine if it is a plugin or not
const isPlugin = options.for?.type === 'plugin';
// Helper function to handle deleting attribute and secret keys
const deleteKey = (json) => {
if (options.isNestedAttribute) {
delete json?.attributes?.[key];
} else if (options.isNestedSecret && json?.secrets?.[key]) {
delete json?.secrets?.[key];
if (Object.keys(json.secrets).length === 0) {
delete json.secrets;
}
} else {
delete json[key];
}
};
// For plugins, the `for` option is an object with a `name` key
// For non-plugins, the `for` option can be string or an array
if (
(isPlugin && !options.for?.name.includes(compositeType)) ||
(!isPlugin &&
!options.for?.includes(recordType) &&
typeOf(options.for) === 'array') ||
(!isPlugin &&
options.for !== recordType &&
typeOf(options.for) === 'string')
) {
deleteKey(json);
}
}
return value;
@@ -211,12 +244,10 @@ export default class ApplicationSerializer extends RESTSerializer {
* @return {object}
*/
normalizeMissingArrays(store, primaryModelClass, payload) {
const attrDefs = store
.getSchemaDefinitionService()
.attributesDefinitionFor({ type: primaryModelClass.modelName });
const attrDefs = store.schema.fields({ type: primaryModelClass.modelName });
if (attrDefs) {
Object.keys(attrDefs).forEach((key) => {
if (!payload[key] && attrDefs[key]?.options?.emptyArrayIfMissing) {
attrDefs.keys().forEach((key) => {
if (!payload[key] && attrDefs.get(key)?.options?.emptyArrayIfMissing) {
payload[key] = [];
}
});
@@ -235,12 +266,10 @@ export default class ApplicationSerializer extends RESTSerializer {
* @return {object}
*/
normalizeMissingObjects(store, primaryModelClass, payload) {
const attrDefs = store
.getSchemaDefinitionService()
.attributesDefinitionFor({ type: primaryModelClass.modelName });
const attrDefs = store.schema.fields({ type: primaryModelClass.modelName });
if (attrDefs) {
Object.keys(attrDefs).forEach((key) => {
if (!payload[key] && attrDefs[key]?.options?.emptyObjectIfMissing) {
attrDefs.keys().forEach((key) => {
if (!payload[key] && attrDefs.get(key)?.options?.emptyObjectIfMissing) {
payload[key] = {};
}
});
@@ -28,6 +28,7 @@ export default class CredentialLibrarySerializer extends ApplicationSerializer {
case TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC:
return this.serializeVaultGeneric(...arguments);
case TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE:
return this.serializeVaultSshCertificate(...arguments);
default:
return super.serialize(...arguments);
}
@@ -61,4 +62,16 @@ export default class CredentialLibrarySerializer extends ApplicationSerializer {
return serialized;
}
}
serializeVaultSshCertificate() {
const serialized = super.serialize(...arguments);
if (serialized.attributes) {
const { key_type } = serialized.attributes;
if (key_type !== 'rsa' && key_type !== 'ecdsa') {
// If the key type is not RSA or ECDSA, set key_bits to null
serialized.attributes.key_bits = null;
}
return serialized;
}
}
}
+28 -44
View File
@@ -4,61 +4,45 @@
*/
import ApplicationSerializer from './application';
const fieldsByType = {
aws: [
'disable_credential_rotation',
'region',
'access_key_id',
'secret_access_key',
],
azure: [
'disable_credential_rotation',
'tenant_id',
'client_id',
'subscription_id',
'secret_id',
'secret_value',
],
};
import { TYPE_CREDENTIAL_DYNAMIC } from '../models/host-catalog';
export default class HostCatalogSerializer extends ApplicationSerializer {
// =methods
serialize(snapshot) {
const { credentialType } = snapshot.record;
const serialized = super.serialize(...arguments);
switch (snapshot.record.compositeType) {
case 'static':
return this.serializeStatic(...arguments);
default:
return serialized;
// By default, disable credential rotation for dynamic credentials
if (credentialType === TYPE_CREDENTIAL_DYNAMIC) {
serialized.attributes.disable_credential_rotation = true;
}
return serialized;
}
serializeAttribute(snapshot, json, key, attribute) {
const value = super.serializeAttribute(...arguments);
const { isPlugin, compositeType } = snapshot.record;
const { compositeType, credentialType } = snapshot.record;
const { options } = attribute;
// Nested conditionals for readability
// This deletes any fields that don't belong to the record type
if (isPlugin && options.isNestedAttribute && json.attributes) {
// The key must be included in the fieldsByType list above
if (!fieldsByType[compositeType].includes(key))
delete json.attributes[key];
}
// This deletes any fields that don't belong to the record type
if (isPlugin && options.isNestedSecret && json.secrets) {
if (!fieldsByType[compositeType].includes(key)) delete json.secrets[key];
}
const isSamePluginName = options?.for?.name?.includes(compositeType);
// new one for isNestedSecret
// Remove attributes that are not applicable to the current credential type for the same plugin
// For example, 'aws' dynamic plugin has two credential types: 'static' and 'dynamic'
// API expects the fields to be 'null' for the fields that are not from the current credential type (that's why we are not using the application serializer for this, where we delete attrs)
// Empty secrets should be removed from the JSON
if (
isSamePluginName &&
options.for.credentialType &&
options.for.credentialType !== credentialType
) {
if (options.isNestedAttribute) {
json.attributes[key] = null;
} else if (options.isNestedSecret && json.secrets?.[key]) {
delete json.secrets[key];
if (Object.keys(json.secrets).length === 0) {
delete json.secrets;
}
} else {
delete json[key];
}
}
return value;
}
serializeStatic() {
const serialized = super.serialize(...arguments);
// Delete unnecessary fields for static host-catalog
delete serialized.attributes;
delete serialized.secrets;
return serialized;
}
}
+15 -13
View File
@@ -5,10 +5,6 @@
import ApplicationSerializer from './application';
const fieldByType = {
aws: ['preferred_endpoints', 'filters', 'sync_interval_seconds'],
azure: ['preferred_endpoints', 'filter_string', 'sync_interval_seconds'],
};
export default class HostSetSerializer extends ApplicationSerializer {
// =properties
@@ -63,16 +59,8 @@ export default class HostSetSerializer extends ApplicationSerializer {
return serialized;
}
serializeAttribute(snapshot, json, key, attribute) {
serializeAttribute(snapshot, json, key) {
const value = super.serializeAttribute(...arguments);
const { isPlugin, compositeType } = snapshot.record;
const { options } = attribute;
if (isPlugin && options.isNestedAttribute) {
if (!fieldByType[compositeType].includes(key)) {
delete json.attributes[key];
}
}
if (key === 'filter_string') {
const { filter_string } = json.attributes;
@@ -107,4 +95,18 @@ export default class HostSetSerializer extends ApplicationSerializer {
return super.normalize(typeClass, normalizedHash, ...rest);
}
/**
* Extracts errors from the payload and transforms specific keys if needed.
* @override
* @return {object}
*/
extractErrors() {
const errors = super.extractErrors(...arguments);
if (errors?.filter) {
errors.filter_string = errors.filter;
delete errors.filter;
}
return errors;
}
}
@@ -53,4 +53,18 @@ export default class ManagedGroupSerializer extends ApplicationSerializer {
return super.normalize(typeClass, normalizedHash, ...rest);
}
/**
* Extracts errors from the payload and transforms specific keys if needed.
* @override
* @return {object}
*/
extractErrors() {
const errors = super.extractErrors(...arguments);
if (errors?.filter) {
errors.filter_string = errors.filter;
delete errors.filter;
}
return errors;
}
}
@@ -72,6 +72,7 @@ export default class StorageBucketSerializer extends ApplicationSerializer {
const value = super.serializeAttribute(...arguments);
const { credentialType } = snapshot.record;
const { options } = attribute;
// This deletes any fields that don't belong to the record's credential type
if (options.isNestedAttribute && json.attributes) {
// The key must be included in the fieldsByType list above
+26 -3
View File
@@ -29,6 +29,10 @@ export const modelIndexes = {
'&id, attributes.created_time, attributes.type, attributes.name, attributes.description, attributes.scope.scope_id, attributes.plugin.name',
'auth-method':
'&id, attributes.created_time, attributes.type, attributes.name, attributes.description, attributes.is_primary, attributes.scope.scope_id',
'session-recording':
'&id, attributes.created_time, attributes.type, attributes.state, attributes.start_time, attributes.end_time, attributes.duration, attributes.scope.scope_id, attributes.create_time_values.user.id, attributes.create_time_values.user.name, attributes.create_time_values.target.id, attributes.create_time_values.target.name, attributes.create_time_values.target.scope.id, attributes.create_time_values.target.scope.name',
alias:
'&id, attributes.created_time, attributes.type, attributes.value, attributes.name, attributes.description, attributes.destination_id, attributes.scope.scope_id',
};
export const formatDbName = (userId, clusterUrl) =>
@@ -93,23 +97,42 @@ const unconvertFields = (result, object, schema, serializer) => {
/**
* Service to encapsulate the IndexedDB implementation. To use this service, call
* `setup` from the application root and
* `setup` from the application root. This will create the database and the necessary indexes.
*
* Make sure to increment the version number of the database whenever the indexes change.
* This will delete the old database and create a new one with the new indexes.
*/
export default class IndexedDbService extends Service {
// =attributes
#db;
#version = 2;
get db() {
return this.#db;
}
setup(dbName) {
async setup(dbName) {
// Don't run setup again if we already have one or if we didn't get a name
if (this.#db || !dbName) {
return;
}
const doesDbExist = await Dexie.exists(dbName);
// If the database already exists, open the database and
// check if the version is a lower version than the current one
if (doesDbExist) {
const dbVerifier = new Dexie(dbName);
await dbVerifier.open();
if (dbVerifier.verno < this.#version) {
await dbVerifier.delete();
} else {
dbVerifier.close();
}
}
this.#db = new Dexie(dbName);
this.#db.version(1).stores(modelIndexes);
this.#db.version(this.#version).stores(modelIndexes);
}
/**
@@ -4,7 +4,7 @@
*/
import Service from '@ember/service';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
/**
* Takes a POJO representing a query and converts it to a boolean expression
+1 -1
View File
@@ -56,7 +56,7 @@ class MemoryStorage {
*
* @example
* import Route from '@ember/routing/route';
* import { inject as service } from '@ember/service';
* import { service } from '@ember/service';
* export default class ApplicationRoute extends Route {
* @service storage;
* afterModel() {
+5 -1
View File
@@ -3,7 +3,11 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import Store, { CacheHandler } from '@ember-data/store';
// Importing 'Store' from 'ember-data/store' to get default configuration automatically.
// TODO: Remove eslint-disable after upgrading to eslint-plugin-ember >= v12.2.1
// eslint-disable-next-line ember/use-ember-data-rfc-395-imports
import Store from 'ember-data/store';
import { CacheHandler } from '@ember-data/store';
import RequestManager from '@ember-data/request';
import { LegacyNetworkHandler } from '@ember-data/legacy-compat';
import IndexedDbHandler from 'api/handlers/indexed-db-handler';
@@ -3,9 +3,7 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import Transform from '@ember-data/serializer/transform';
export default class AccountValueMapArrayTransform extends Transform {
export default class AccountValueMapArrayTransform {
deserialize(serialized) {
const accountValues = serialized || [];
return accountValues.map((accountValueString) => ({
@@ -18,4 +16,8 @@ export default class AccountValueMapArrayTransform extends Transform {
const accountValues = deserialized || [];
return accountValues.map(({ key, value }) => `${key}=${value}`);
}
static create() {
return new this();
}
}
+5 -2
View File
@@ -3,10 +3,9 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import Transform from '@ember-data/serializer/transform';
import { TrackedArray } from 'tracked-built-ins';
export default class ArrayTransform extends Transform {
export default class ArrayTransform {
deserialize(serialized) {
const arr = new TrackedArray(serialized || []);
return arr;
@@ -16,4 +15,8 @@ export default class ArrayTransform extends Transform {
const arr = deserialized || [];
return arr;
}
static create() {
return new this();
}
}
+5 -3
View File
@@ -3,9 +3,7 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import Transform from '@ember-data/serializer/transform';
export default class DurationTransform extends Transform {
export default class DurationTransform {
/**
* Normalize a duration string in the format "3.0001s" to milliseconds.
* The backend returns a precision of nanoseconds but we round to whole
@@ -37,4 +35,8 @@ export default class DurationTransform extends Transform {
maximumFractionDigits: 9,
})}s`;
}
static create() {
return new this();
}
}
@@ -3,9 +3,7 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import Transform from '@ember-data/serializer/transform';
export default class HostSourceIdArrayTransform extends Transform {
export default class HostSourceIdArrayTransform {
deserialize(serialized) {
const stringValues = serialized || [];
return stringValues.map(({ id: host_source_id, ...obj }) => ({
@@ -18,4 +16,8 @@ export default class HostSourceIdArrayTransform extends Transform {
const strings = deserialized || [];
return strings.map(({ host_source_id: id, ...obj }) => ({ id, ...obj }));
}
static create() {
return new this();
}
}
@@ -3,13 +3,12 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import Transform from '@ember-data/serializer/transform';
export default class ObjectAsArrayTransform extends Transform {
export default class ObjectAsArrayTransform {
deserialize(serialized) {
const obj = serialized || {};
return Object.entries(obj).map(([key, value]) => ({ key, value }));
}
serialize(deserialized) {
const array = deserialized || [];
@@ -24,4 +23,8 @@ export default class ObjectAsArrayTransform extends Transform {
return result;
}, {});
}
static create() {
return new this();
}
}
+5 -2
View File
@@ -3,10 +3,9 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import Transform from '@ember-data/serializer/transform';
import { TrackedObject } from 'tracked-built-ins';
export default class ObjectTransform extends Transform {
export default class ObjectTransform {
/**
* @param serialized
* @returns {object}
@@ -26,4 +25,8 @@ export default class ObjectTransform extends Transform {
}
return deserialized;
}
static create() {
return new this();
}
}
+5 -3
View File
@@ -3,9 +3,7 @@
* SPDX-License-Identifier: BUSL-1.1
*/
import Transform from '@ember-data/serializer/transform';
export default class StringArrayTransform extends Transform {
export default class StringArrayTransform {
deserialize(serialized) {
const stringValues = serialized || [];
return stringValues.map((value) => ({ value }));
@@ -15,4 +13,8 @@ export default class StringArrayTransform extends Transform {
const strings = deserialized || [];
return strings.map(({ value }) => value);
}
static create() {
return new this();
}
}
@@ -0,0 +1,27 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { typeOf } from '@ember/utils';
/**
* Flattens a nested object into a single-level object.
* @param obj
* @param result
* @param parentKey
* @returns {Object}
*/
export const flattenObject = (obj, result = {}, parentKey = '') => {
for (const key in obj) {
// Check if the value is an object and it is not null
if (typeOf(obj[key]) === 'object' && obj[key] !== null) {
// Recursively flatten the object
flattenObject(obj[key], result, `${parentKey}${key}.`);
} else if (obj[key] !== null && obj[key] !== '') {
// Only add to result if the value is not null or an empty string
result[`${parentKey}${key}`] = obj[key];
}
}
return result;
};
+3 -8
View File
@@ -70,14 +70,9 @@ export async function queryIndexedDb(indexedDb, resource, query) {
);
}
// OrderBy has to be used on where clauses while if it's a
// collection already we have to use sortBy. We'll also sort by
// descending order based on created time to match the API as any
// "or" clause can change the order
if (filterCollection.orderBy) {
return filterCollection.orderBy(getKey('created_time')).reverse().toArray();
}
return filterCollection.reverse().sortBy(getKey('created_time'));
// filterCollection can be Dexie Table or a Dexie Collection.
// This is an important detail you need to keep in mind when working on it.
return filterCollection.toArray();
}
const buildInitialWhereClause = ({ filterArrayOrObject, table, key }) => {
+84
View File
@@ -0,0 +1,84 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
// created_time is not an attribute defined on all models, but is present in all the resources
// coming from API
const SORT_DEFAULT_ATTRIBUTE = 'created_time';
const SORT_DIRECTION_ASCENDING = 'asc';
const SORT_DIRECTION_DESCENDING = 'desc';
const sortFunctions = {
string: (a, b) => String(a).localeCompare(String(b)),
date: (a, b) => new Date(a).getTime() - new Date(b).getTime(),
number: (a, b) => Number(a) - Number(b),
boolean: (a, b) => Number(a) - Number(b),
};
function getSortableValue(schema, record, attribute) {
if (attribute === 'id') {
return record.id;
}
// all models have a created_time attribute but not all models have it defined
if (attribute === 'created_time') {
return record.attributes.created_time;
}
if (schema.attributes.has(attribute)) {
return record.attributes[attribute];
}
const attributes = Array.from(schema.attributes.keys());
throw new Error(
`The attribute "${attribute}" does not map to the model definition of type "${record.type}". Supported sortable attributes are 'id', 'created_time', or ${attributes.map((attr) => `'${attr}'`).join(', ')}`,
);
}
export const sortResults = (results, { querySort, schema }) => {
querySort = querySort ?? {};
const sortAttribute = querySort.attribute || SORT_DEFAULT_ATTRIBUTE;
// Default sort direction is ascending unless we are sorting by `created_time` (default sort attribute)
const defaultSortDirection =
sortAttribute === SORT_DEFAULT_ATTRIBUTE && !querySort.sortFunction
? SORT_DIRECTION_DESCENDING
: SORT_DIRECTION_ASCENDING;
const sortDirection = querySort.direction || defaultSortDirection;
if (
![SORT_DIRECTION_ASCENDING, SORT_DIRECTION_DESCENDING].includes(
sortDirection,
)
) {
throw new Error('Invalid sort direction');
}
// Execute custom sort function if one is provided.
if (querySort.sortFunction) {
return results.toSorted((a, b) => {
const sortResult = querySort.sortFunction(a, b);
return sortDirection === SORT_DIRECTION_ASCENDING
? sortResult
: -1 * sortResult;
});
}
const sortAttributeDataType = schema.attributes.get(sortAttribute)?.type;
const sortFunction =
sortFunctions[sortAttributeDataType] ?? sortFunctions.string;
return results.toSorted((a, b) => {
// Extract the values to sort and sort them.
const sortValueA = getSortableValue(schema, a, sortAttribute);
const sortValueB = getSortableValue(schema, b, sortAttribute);
const sortResult = sortFunction(sortValueA, sortValueB);
return sortDirection === SORT_DIRECTION_ASCENDING
? sortResult
: -1 * sortResult;
});
};
+7
View File
@@ -0,0 +1,7 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
// Ember-data no longer automatically installs BooleanTransform for apps.
export { BooleanTransform as default } from '@ember-data/serializer/transform';
@@ -3,4 +3,4 @@
* SPDX-License-Identifier: BUSL-1.1
*/
export { default, initialize } from 'core/initializers/deprecations';
export { DateTransform as default } from '@ember-data/serializer/transform';
@@ -3,4 +3,4 @@
* SPDX-License-Identifier: BUSL-1.1
*/
export { default, initialize } from 'api/initializers/deprecations';
export { NumberTransform as default } from '@ember-data/serializer/transform';
+7
View File
@@ -0,0 +1,7 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
// Ember-data no longer automatically installs StringTransform for apps.
export { StringTransform as default } from '@ember-data/serializer/transform';
+2 -1
View File
@@ -6,7 +6,6 @@
'use strict';
const EmberAddon = require('ember-cli/lib/broccoli/ember-addon');
const { maybeEmbroider } = require('@embroider/test-setup');
module.exports = function (defaults) {
const app = new EmberAddon(defaults, {
@@ -19,6 +18,8 @@ module.exports = function (defaults) {
This build file does *not* influence how the addon or the app using it
behave. You most likely want to be modifying `./index.js` or app's build file
*/
const { maybeEmbroider } = require('@embroider/test-setup');
return maybeEmbroider(app, {
skipBabel: [
{
+5 -13
View File
@@ -25,7 +25,10 @@ const isTesting = environmentConfig.environment === 'test';
export default function (mirageConfig) {
let finalConfig = {
...mirageConfig,
models: { ...discoverEmberDataModels(), ...mirageConfig.models },
models: {
...discoverEmberDataModels(mirageConfig.store),
...mirageConfig.models,
},
serializers: applyEmberDataSerializers(mirageConfig.serializers),
routes,
};
@@ -775,18 +778,7 @@ function routes() {
});
// session recordings
this.get(
'/session-recordings',
(
{ sessionRecordings },
{ queryParams: { scope_id: scopeId, recursive } },
) => {
if (recursive && scopeId === 'global') {
return sessionRecordings.all();
}
return sessionRecordings.where({ scopeId });
},
);
this.get('/session-recordings');
this.get(
'/session-recordings/:idMethod',
async ({ sessionRecordings }, { params: { idMethod } }) => {
+2 -1
View File
@@ -50,7 +50,8 @@ export default factory.extend({
}
case TYPE_AUTH_METHOD_OIDC:
return {
issuer: faker.internet.ip(),
issuer:
Math.random() > 0.5 ? faker.internet.ip() : faker.internet.ipv6(),
subject: 'sub',
email: faker.internet.email(),
full_name: faker.person.fullName(),
@@ -39,7 +39,8 @@ export default factory.extend({
switch (this.type) {
case 'vault':
return {
address: faker.internet.ip(),
address:
Math.random() > 0.5 ? faker.internet.ip() : faker.internet.ipv6(),
namespace: faker.word.words(1),
ca_cert: 'ca-cert-123',
tls_server_name: faker.internet.domainName(),
+47 -12
View File
@@ -8,19 +8,29 @@ import { trait } from 'miragejs';
import permissions from '../helpers/permissions';
import { faker } from '@faker-js/faker';
import generateId from '../helpers/id';
import {
TYPE_HOST_CATALOG_PLUGIN_AZURE,
TYPE_HOST_CATALOG_PLUGIN_GCP,
TYPE_HOST_CATALOG_PLUGIN_AWS,
TYPE_HOST_CATALOG_STATIC,
TYPE_HOST_CATALOG_DYNAMIC,
TYPES_HOST_CATALOG,
} from 'api/models/host-catalog';
const types = ['static', 'plugin'];
// Represents known plugin types, except "foobar" which models the possibility
// of receiving an _unknown_ type, which the UI must handle gracefully.
const pluginTypes = ['aws', 'azure', 'foobar'];
let pluginTypeCounter = 1;
const pluginTypes = [
TYPE_HOST_CATALOG_PLUGIN_GCP,
TYPE_HOST_CATALOG_PLUGIN_AWS,
TYPE_HOST_CATALOG_PLUGIN_AZURE,
'foobar',
];
export default factory.extend({
id: () => generateId('hc_'),
// Cycle through available types
type: (i) => types[i % types.length],
type: (i) => TYPES_HOST_CATALOG[i % TYPES_HOST_CATALOG.length],
authorized_actions: () =>
permissions.authorizedActionsFor('host-catalog') || [
@@ -30,7 +40,7 @@ export default factory.extend({
'delete',
],
authorized_collection_actions: function () {
const isStatic = this.type === 'static';
const isStatic = this.type === TYPE_HOST_CATALOG_STATIC;
return {
// only static catalogs allow host create at this time
hosts: isStatic ? ['create', 'list'] : ['list'],
@@ -38,11 +48,21 @@ export default factory.extend({
};
},
worker_filter: function () {
if (
this.type === TYPE_HOST_CATALOG_DYNAMIC &&
(this.plugin?.name === TYPE_HOST_CATALOG_PLUGIN_AWS ||
this.plugin?.name === TYPE_HOST_CATALOG_PLUGIN_GCP)
) {
return `"${faker.word.noun()}" in "${faker.system.directoryPath()}"`;
}
},
plugin: function (i) {
if (this.type === 'plugin') {
if (this.type === TYPE_HOST_CATALOG_DYNAMIC) {
return {
id: `plugin-id-${i}`,
name: pluginTypes[pluginTypeCounter++ % pluginTypes.length],
name: pluginTypes[i % pluginTypes.length],
description: faker.word.words(),
};
}
@@ -50,35 +70,50 @@ export default factory.extend({
attributes() {
switch (this.plugin?.name) {
case 'aws':
case TYPE_HOST_CATALOG_PLUGIN_AWS:
return {
disable_credential_rotation: faker.datatype.boolean(),
region: `us-${faker.location.cardinalDirection()}-${faker.number.int(
9,
)}`,
};
case 'azure':
case TYPE_HOST_CATALOG_PLUGIN_AZURE:
return {
disable_credential_rotation: faker.datatype.boolean(),
tenant_id: faker.string.uuid(),
client_id: faker.string.uuid(),
subscription_id: faker.string.uuid(),
};
case TYPE_HOST_CATALOG_PLUGIN_GCP:
return {
disable_credential_rotation: faker.datatype.boolean(),
project_id: faker.string.uuid(),
client_email: faker.internet.email(),
target_service_account_id: faker.string.uuid(),
zone: `us-${faker.location.cardinalDirection()}${faker.number.int(
9,
)}-${faker.string.fromCharacters('abc')}`,
};
}
},
secrets() {
switch (this.plugin?.name) {
case 'aws':
case TYPE_HOST_CATALOG_PLUGIN_AWS:
return {
access_key_id: faker.string.nanoid(),
secret_access_key: faker.string.nanoid(),
};
case 'azure':
case TYPE_HOST_CATALOG_PLUGIN_AZURE:
return {
secret_id: faker.string.nanoid(),
secret_value: faker.string.nanoid(),
};
case TYPE_HOST_CATALOG_PLUGIN_GCP:
return {
private_key: faker.string.nanoid(),
private_key_id: faker.string.nanoid(),
};
}
},
withChildren: trait({
+30 -19
View File
@@ -7,6 +7,22 @@ import factory from '../generated/factories/host-set';
import permissions from '../helpers/permissions';
import { faker } from '@faker-js/faker';
import generateId from '../helpers/id';
import {
TYPE_HOST_CATALOG_PLUGIN_AWS,
TYPE_HOST_CATALOG_PLUGIN_AZURE,
TYPE_HOST_CATALOG_PLUGIN_GCP,
} from 'api/models/host-catalog';
function generateFilters(prefix) {
const filtersAmount = faker.number.int({ min: 1, max: 5 });
let filters = [];
for (let i = 0; i < filtersAmount; ++i) {
filters.push(`${prefix}${faker.word.words(1)}=${faker.word.words(1)}`);
}
return {
filters,
};
}
export default factory.extend({
id: () => generateId('hs_'),
@@ -27,10 +43,12 @@ export default factory.extend({
},
preferred_endpoints() {
if (this.type === 'plugin') {
const enpointsAmount = faker.number.int({ min: 1, max: 5 });
const endpointsAmount = faker.number.int({ min: 1, max: 5 });
let result = [];
for (let i = 0; i < enpointsAmount; ++i) {
result.push(faker.internet.ip());
for (let i = 0; i < endpointsAmount; ++i) {
result.push(
Math.random() > 0.5 ? faker.internet.ip() : faker.internet.ipv6(),
);
}
return result;
}
@@ -42,22 +60,15 @@ export default factory.extend({
},
attributes() {
// AWS specific
if (this.plugin?.name === 'aws') {
const filtersAmount = faker.number.int({ min: 1, max: 5 });
let filters = [];
for (let i = 0; i < filtersAmount; ++i) {
filters.push(`${faker.word.words(1)}=${faker.word.words(1)}`);
}
return {
filters,
};
}
// Azure specific
if (this.plugin?.name === 'azure') {
return {
filter: `${faker.database.column()}=${faker.database.collation()}`,
};
switch (this.plugin?.name) {
case TYPE_HOST_CATALOG_PLUGIN_AWS:
return generateFilters('tag:');
case TYPE_HOST_CATALOG_PLUGIN_AZURE:
return {
filter: `${faker.database.column()}=${faker.database.collation()}`,
};
case TYPE_HOST_CATALOG_PLUGIN_GCP:
return generateFilters('labels.');
}
},
});
+12 -6
View File
@@ -7,24 +7,28 @@ import factory from '../generated/factories/host';
import permissions from '../helpers/permissions';
import { faker } from '@faker-js/faker';
import generateId from '../helpers/id';
import {
TYPE_HOST_CATALOG_STATIC,
TYPE_HOST_CATALOG_DYNAMIC,
} from 'api/models/host-catalog';
export default factory.extend({
id: () => generateId('h_'),
name() {
if (this.type === 'static') return faker.word.words();
if (this.type === TYPE_HOST_CATALOG_STATIC) return faker.word.words();
},
type() {
return this.hostCatalog?.type || factory.attrs.type;
},
authorized_actions: function () {
const isStatic = this.type === 'static';
const isStatic = this.type === TYPE_HOST_CATALOG_STATIC;
const defaults = ['no-op', 'read'];
// Only static allows update/delete at this time.
if (isStatic) defaults.push('update', 'delete');
return permissions.authorizedActionsFor('host') || defaults;
},
plugin() {
if (this.type === 'plugin') {
if (this.type === TYPE_HOST_CATALOG_DYNAMIC) {
return this.hostCatalog.plugin;
}
},
@@ -32,18 +36,20 @@ export default factory.extend({
const addressesAmount = Math.floor(Math.random() * 6) + 1;
let result = [];
for (let i = 0; i < addressesAmount; ++i) {
result.push(faker.internet.ip());
result.push(
Math.random() > 0.5 ? faker.internet.ip() : faker.internet.ipv6(),
);
}
return result;
},
// Return external fields only for plugins
external_id() {
if (this.type === 'plugin') {
if (this.type === TYPE_HOST_CATALOG_DYNAMIC) {
return faker.string.uuid();
}
},
external_name(i) {
if (this.type === 'plugin') {
if (this.type === TYPE_HOST_CATALOG_DYNAMIC) {
return `${this.plugin.name} provided name ${i}`;
}
},
+1 -1
View File
@@ -15,7 +15,7 @@ export default factory.extend({
authorized_actions() {
const authorizedActions = ['no-op', 'read', 'update'];
// Storage policies can only be attatched to global and org scopes.
// Storage policies can only be attached to global and org scopes.
if (this.type === 'global' || this.type === 'org') {
authorizedActions.push('attach-storage-policy', 'detach-storage-policy');
}
+33
View File
@@ -103,6 +103,31 @@ export default factory.extend({
},
}),
withManyHosts: trait({
afterCreate(target, server) {
const { scope } = target;
const hostCatalog = server.create('host-catalog', { scope });
const hosts = server.createList('host', 15, {
scope,
hostCatalog,
type: hostCatalog.type,
});
const hostSets = [
server.create('host-set', {
scope,
hostCatalog,
hosts,
type: hostCatalog.type,
}),
];
const hostSetIds = hostSets.map((hostSet) => hostSet.id);
hosts.forEach((host) => {
host.update({ hostSetIds });
});
target.update({ hostSets });
},
}),
withTwoHosts: trait({
afterCreate(target, server) {
const { scope } = target;
@@ -120,6 +145,10 @@ export default factory.extend({
type: hostCatalog.type,
}),
];
const hostSetIds = hostSets.map((hostSet) => hostSet.id);
hosts.forEach((host) => {
host.update({ hostSetIds });
});
target.update({ hostSets });
},
}),
@@ -139,6 +168,10 @@ export default factory.extend({
type: hostCatalog.type,
}),
];
const hostSetIds = hostSets.map((hostSet) => hostSet.id);
hosts.forEach((host) => {
host.update({ hostSetIds });
});
target.update({ hostSets });
},
}),
@@ -16,6 +16,9 @@ export default Factory.extend({
updated_time: () => faker.date.recent(),
version: () => faker.number.int(),
attributes: () => {
return { address: faker.internet.ipv6() };
return {
address:
Math.random() > 0.5 ? faker.internet.ip() : faker.internet.ipv6(),
};
},
});
-23
View File
@@ -3,31 +3,8 @@
* SPDX-License-Identifier: BUSL-1.1
*/
// import config from '../../config/environment';
// import { v1 } from 'ember-uuid';
import { Response } from 'miragejs';
// /**
// * Simulates a cookie-based response to authentication requests. Any user/pass
// * values are allowed *except* when `username` equals `error`, in which case a
// * simulated error response is returned.
// * @param {object} schema
// * @param {object} request
// * @return {Response}
// */
// export default function authenticateHandler(schema, request) {
// const payload = JSON.parse(request.requestBody);
// if (payload.attributes.login_name === 'error') {
// return new Response(400);
// } else {
// const cookieName = config.auth.passwordCookieName;
// const cookieValue = v1();
// const cookiePath = config.rootURL;
// document.cookie = `${cookieName}=${cookieValue};path=${cookiePath}`;
// return new Response(200);
// }
// }
// Quick and dirty counter system to simulate the polling behavior
// of the API. If the OIDC flow is pending, the route returns 100.
// If complete it returns 200 with the token JSON.
+12 -1
View File
@@ -110,7 +110,18 @@ export default function (server) {
// Other resources
server.schema.scopes.where({ type: 'project' }).models.forEach((scope) => {
server.createList('host-catalog', 8, { scope }, 'withChildren');
server.createList(
'host-catalog',
2,
{ scope, type: 'static' },
'withChildren',
);
server.createList(
'host-catalog',
8,
{ scope, type: 'plugin' },
'withChildren',
);
server.createList('credential-store', 3, { scope }, 'withAssociations');
server.createList('target', 2, { scope }, 'withAssociations');
server.create('target', { scope, address: '0.0.0.0' });
+56
View File
@@ -83,6 +83,37 @@ export default function initializeMockIPC(server, config) {
raw: btoa('just-a-random-string'),
},
},
{
credential_source: {
id: 'clvlt_4cvscMTl0N',
name: 'Credential Library 0',
description: 'Source Description',
credential_store_id: 'csvlt_Q1HFGt7Jpm',
type: 'vault-generic',
},
secret: {
raw: 'eyJhcnJheSI6WyJvbmUiLCJ0d28iLCJ0aHJlZSIsIm9uZSIsInR3byIsInRocmVlIiwib25lIiwidHdvIiwidGhyZWUiLCJvbmUiLCJ0d28iLCJ0aHJlZSJdLCJuZXN0ZWQiOnsiYm9vbCI6dHJ1ZSwibG9uZyI6IjEyMjM1MzQ1NmFzZWRmYTQzd3J0ZjIzNGYyM2FzZGdmYXNkZnJnYXdzZWZhd3NlZnNkZjQiLCJzZWNlcmV0Ijoic28gbmVzdGVkIn0sInRlc3QiOiJwaHJhc2UifQ',
decoded: {
data: {
backslash: 'password\\withslash\\',
backslash1: 'password\\fwithslash\\f',
password: '123',
username: 'test',
email: {
address: 'test.com',
},
},
metadata: {
created_time: '2024-04-12T18:38:36.226715555Z',
custom_metadata: null,
deletion_time: '',
destroyed: false,
version: 8,
},
},
},
},
{
credential_source: {
id: 'credjson_7cKBbBEkC3',
@@ -98,6 +129,7 @@ export default function initializeMockIPC(server, config) {
nested_secret: {
session_token: 'ZXCVBNMLKJHGFDSAQWERTYUIOP0987654321',
complex_nest: {
blackslash: 'password\\withslash\\',
hash: 'qazxswedcvfrtgbnjhyujm.1234567890',
},
},
@@ -167,6 +199,9 @@ export default function initializeMockIPC(server, config) {
* Check for OS chrome state
*/
showWindowActions() {
if (navigator.userAgent.includes('Mac')) {
return false;
}
return true;
}
@@ -190,6 +225,27 @@ export default function initializeMockIPC(server, config) {
isClientAgentRunning() {
return false;
}
cacheDaemonStatus() {
return { version: 'Boundary v1.0.0' };
}
getCliVersion() {
return { versionNumber: '1.0.0' };
}
getDesktopVersion() {
return { desktopVersion: '1.0.0' };
}
getLogLevel() {
return 'info';
}
getLogPath() {
return '~/.config/Boundary/logs/desktop-client.log';
}
setLogLevel() {}
clientAgentStatus() {
return { version: '0.0.1-dev', status: 'running' };
}
pauseClientAgent() {}
resumeClientAgent() {}
}
/**
+48 -38
View File
@@ -10,8 +10,10 @@
"scripts": {
"build:development": "ember build",
"build": "ember build --environment=production",
"lint": "concurrently \"npm:lint:*(!fix)\" --names \"lint:\"",
"lint:fix": "concurrently \"npm:lint:*:fix\" --names \"fix:\"",
"lint": "concurrently \"pnpm:lint:*(!fix)\" --names \"lint:\"",
"lint:fix": "concurrently \"pnpm:lint:*:fix\" --names \"fix:\"",
"lint:hbs": "ember-template-lint .",
"lint:hbs:fix": "ember-template-lint . --fix",
"lint:js": "eslint .",
"lint:js:fix": "eslint . --fix",
"format": "concurrently \"npm:format:*\" --names \"format:\"",
@@ -19,64 +21,69 @@
"start": "ember serve",
"test": "ember exam --test-port 0 --split=4 --parallel=1 --random",
"test:ember-compatibility": "ember try:each",
"precommit": "yarn lint && yarn format && yarn test",
"precommit": "pnpm lint && pnpm format && pnpm test",
"doc:toc": "doctoc README.md"
},
"dependencies": {
"@babel/core": "^7.26.10",
"@ember/string": "^4.0.0",
"dexie": "^3.2.4",
"ember-auto-import": "^2.6.3",
"ember-auto-import": "^2.10.0",
"ember-can": "^4.2.0",
"ember-cli-babel": "^7.26.10",
"ember-cli-htmlbars": "^6.2.0",
"ember-cli-mirage": "^2.4.0",
"ember-data": "~4.12.0",
"ember-fetch": "^8.1.1",
"ember-cli-babel": "^8.2.0",
"ember-cli-htmlbars": "^6.3.0",
"ember-cli-mirage": "^3.0.3",
"ember-data": "~5.3.12",
"miragejs": "^0.1.48",
"tracked-built-ins": "^3.1.1"
},
"devDependencies": {
"@babel/core": "^7.21.0",
"@babel/eslint-parser": "^7.21.3",
"@babel/plugin-proposal-decorators": "^7.21.0",
"@ember/optional-features": "^2.0.0",
"@ember/string": "^3.0.1",
"@ember/test-helpers": "^2.9.3",
"@embroider/test-setup": "^2.1.1",
"@babel/eslint-parser": "^7.25.1",
"@babel/plugin-proposal-decorators": "^7.24.7",
"@ember/optional-features": "^2.1.0",
"@ember/test-helpers": "^5.2.1",
"@ember/test-waiters": "^4.1.0",
"@embroider/test-setup": "^4.0.0",
"@faker-js/faker": "^8.0.2",
"@glimmer/component": "^1.1.2",
"@glimmer/tracking": "^1.1.2",
"broccoli-asset-rev": "^3.0.0",
"concurrently": "^8.0.1",
"concurrently": "^9.1.0",
"doctoc": "^2.2.0",
"ember-cli": "^4.12.1",
"ember-cli-dependency-checker": "^3.3.1",
"ember-cli": "~5.12.0",
"ember-cli-clean-css": "^3.0.0",
"ember-cli-dependency-checker": "^3.3.2",
"ember-cli-inject-live-reload": "^2.1.0",
"ember-cli-sri": "^2.1.1",
"ember-cli-terser": "^4.0.2",
"ember-exam": "^8.0.0",
"ember-load-initializers": "^2.1.2",
"ember-page-title": "^7.0.0",
"ember-qunit": "^6.2.0",
"ember-resolver": "^10.0.0",
"ember-source": "~4.12.0",
"ember-page-title": "^8.2.3",
"ember-qunit": "^8.1.0",
"ember-resolver": "^12.0.1",
"ember-source": "~5.12.0",
"ember-source-channel-url": "^3.0.0",
"ember-template-lint": "^5.7.2",
"eslint": "^8.54.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-ember": "^11.11.1",
"eslint-plugin-n": "^16.3.1",
"eslint-plugin-qunit": "^8.0.1",
"@faker-js/faker": "^8.0.2",
"ember-template-lint": "^6.0.0",
"ember-try": "^3.0.0",
"eslint": "^8.57.1",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-ember": "^12.2.1",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-qunit": "^8.1.2",
"js-bexpr": "hashicorp/js-bexpr#9b4a4b54d85eba67fdfc0990133d1518d890b1e1",
"loader.js": "^4.7.0",
"prettier": "^3.0.0",
"qunit": "^2.19.4",
"qunit-dom": "^2.0.0",
"webpack": "^5.78.0"
"prettier": "^3.3.3",
"qunit": "^2.22.0",
"qunit-dom": "^3.2.1",
"sinon": "^19.0.2",
"webpack": "^5.95.0"
},
"peerDependencies": {
"ember-source": ">4.0.0"
"ember-source": ">= 4.0.0",
"sinon": "^19.0.2"
},
"engines": {
"node": "18.* || 20.*"
"node": "20.* || 22.*"
},
"ember": {
"edition": "octane"
@@ -85,8 +92,11 @@
"configPath": "tests/dummy/config"
},
"lint-staged": {
"*.js": "eslint --fix",
"*.js": [
"eslint --fix",
"prettier --write"
],
"*.hbs": "ember-template-lint --fix",
"*.{js,scss,yaml}": "prettier --write"
"*.{scss,yaml}": "prettier --write"
}
}
+6
View File
@@ -17,6 +17,12 @@ module.exports = {
// --no-sandbox is needed when running Chrome inside a container
process.env.CI ? '--no-sandbox' : null,
'--headless',
// Disable backgrounding renders for occluded windows
'--disable-backgrounding-occluded-windows',
// Disable renderer process backgrounding
'--disable-renderer-backgrounding',
// Disable task throttling of timer tasks from background pages
'--disable-background-timer-throttling',
'--disable-dev-shm-usage',
'--disable-gpu',
//'--disable-software-rasterizer',
@@ -4,7 +4,7 @@
*/
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
import { service } from '@ember/service';
export default class ApplicationRoute extends Route {
// =services
@@ -2,4 +2,3 @@
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -5,6 +5,6 @@
{{page-title "Dummy"}}
<h2 id="title">Welcome to Ember</h2>
<Hds::Text::Display @tag="h2" id="title">Welcome to Ember</Hds::Text::Display>
{{outlet}}
@@ -3,7 +3,7 @@
"packages": [
{
"name": "ember-cli",
"version": "4.12.1",
"version": "5.12.0",
"blueprints": [
{
"name": "addon",
@@ -11,7 +11,8 @@
"codemodsSource": "ember-addon-codemods-manifest@1",
"isBaseBlueprint": true,
"options": [
"--no-welcome"
"--no-welcome",
"--pnpm"
]
}
]
+5 -12
View File
@@ -10,28 +10,21 @@ const { embroiderSafe, embroiderOptimized } = require('@embroider/test-setup');
module.exports = async function () {
return {
usePnpm: true,
scenarios: [
{
name: 'ember-lts-4.4',
name: 'ember-lts-4.12',
npm: {
devDependencies: {
'ember-source': '~4.4.0',
'ember-source': '~4.12.0',
},
},
},
{
name: 'ember-lts-4.8',
name: 'ember-lts-5.4',
npm: {
devDependencies: {
'ember-source': '~4.8.0',
},
},
},
{
name: 'ember-lts-4.4',
npm: {
devDependencies: {
'ember-source': '~4.4.0',
'ember-source': '~5.4.0',
},
},
},
Loaded 100 of 1445 files, more files were not shown because too many files have changed in this diff. Show more