Compare commits

...
350 Commits
Author SHA1 Message Date
CyberCoveandClaude Sonnet 5.5 8e63f6bd0f ci: build admin test bundle once and run partitions against it
ci / check (push) Successful in 15m57s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 13:57:21 -07:00
CyberCoveandClaude Sonnet 5.5 01e50cb8ce ci: run admin test partitions sequentially (parallel browsers stalled on the runner)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 13:19:19 -07:00
CyberCoveandClaude Sonnet 5.5 1a97b8b428 ci: install chromium from the distro archive instead of downloading Chrome
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 12:53:16 -07:00
CyberCoveandClaude Sonnet 5.5 3f2be6fab0 Security: patch-level dependency overrides, electron 42.11.12; add Gitea CI
- Lockfile-only/overrides bumps within the same major for vulnerable
  transitive build/test tooling (see pnpm-overrides.md)
- electron 42.0.1 -> 42.11.12 (same major) for runtime advisories
- .gitea/workflows/ci.yml: single job (build admin, tests, audit)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 12:42:41 -07:00
CyberCoveandClaude Sonnet 5.5 89089dbb9a Rebrand Boundary UI to Threshold; neutralize HashiCorp update/phone-home endpoints
- Product name, app id, installer names, translations, titles -> Threshold
- Desktop: look for threshold CLI first, then boundary; migrate legacy
  Boundary user-data dir; updater/release lookups disabled unless configured
- Remove HashiCorp/IBM logos and art (plain placeholder mark), GitHub
  release workflows and HashiCorp release metadata
- Add NOTICE and README 'About this fork'

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-12 12:24:16 -07:00
richardtrinh1 25d78b2fc5 chore(deps): upgrade fast-uri to 3.1.8 (#3352) 2026-09-29 10:36:51 -05:00
Zhihe Li 4565676d4b chore: 🤖 Remove merge trigger for ENT (#3351) 2026-09-21 16:07:07 -04:00
Zhihe Li ed9371fab7 chore: 🤖 Update CLI version to correct one (#3336) 2026-07-10 12:17:57 -04:00
Zhihe Li 68a01cfa3a chore: 🤖 Update CLI version (#3335) 2026-07-10 10:17:51 -04:00
Priya Patel b7129e38a8 fix: 🐛 credential library update (#3328)
* fix: 🐛 update credential library serializer

* test: 💍 adds acceptance test

* test: 💍 fix test

* fix: 🐛 fix test

* test: 💍 adds a11y ignore

* chore: 🤖 pr feedback
2026-07-08 14:38:48 -07:00
Lisbet Alvarez 26e27fd24b fix: 🐛 code mirror lint tooltip format issues (#3325)
* fix: 🐛 code mirror lint tooltip format issues

* refactor: 💡 add fallback for parent config

* refactor: 💡 use getOwner to retrieve actual app root element
2026-06-19 12:52:48 -07:00
Zhihe Li d0612c0a46 feat: 🎸 No-op linting errors should be warnings (#3326) 2026-06-19 15:15:58 -04:00
Zhihe Li 347107c109 feat: 🎸 Add discard modal for edit grants page (#3324) 2026-06-18 13:35:49 -04:00
Lisbet Alvarez 0dac4ccf47 Use codemirror tooltip extension to set parent to fix positioning bug (#3323)
* fix: 🐛 absolute positioning of cm tooltip in firefox

* docs: ✏️ add comment

* fix: 🐛 tooltip hidden in editor fullscreen mode & dark mode

* fix: 🐛 tooltip color in dark mode

* docs: ✏️ add comment
2026-06-18 09:59:38 -07:00
Zhihe Li b8ea558f14 ci: 🎡 Update when e2e tests run (#3320) 2026-06-16 14:25:06 -04:00
Priya Patel 4fc061ec48 chore: 🤖 update desktop client changelog (#3316)
* chore: 🤖 update desktop client changelog and version

* fix: 🐛 update PR number

* docs: ✏️ updated log

* fix: 🐛 revert cli version change
2026-06-16 10:06:41 -07:00
Zhihe Li 3313cd5316 feat: 🎸 Add new grants and update grant templates (#3319)
* feat: 🎸 Add new grants and update grant templates

* feat: 🎸 Use wildcard for remaining grants as well
2026-06-15 18:52:50 -04:00
Zhihe Li af36d75252 feat: 🎸 Update deps for newest shell-quote version (#3318) 2026-06-12 17:25:19 -04:00
72a69fbe8d chore(deps): bump shell-quote in /ui/desktop/electron-app (#3313)
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.8.2 to 1.8.4.
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.8.2...v1.8.4)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-version: 1.8.4
  dependency-type: direct:production
...

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>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2026-06-12 13:35:04 -04:00
Michael Li e77ed3ae53 test(e2e): Address flake when loading project page (#3315) 2026-06-12 12:06:36 -04:00
Lisbet Alvarez 677a3c925b fix: 🐛 color of search cancel button icon (#3314) 2026-06-10 16:26:55 -07:00
Priya Patel 4cbe08276a chore: 🤖 updates libraries for webkit to resolve e2e test fais (#3317) 2026-06-10 10:14:40 -07:00
Lisbet Alvarez 20699d62dc chore: 🤖 Add override to pin markdown-it to resolve cve (#3311) 2026-06-09 15:14:23 -07:00
Zhihe Li 048339982e feat: 🎸 Use new path for grants schema (#3309) 2026-06-09 15:35:10 -04:00
Priya Patel 2709c2e081 chore: 🤖 updates chaining using pipe operator (#3312) 2026-06-09 08:19:02 -07:00
Susmitha GirumalaandLisbet Alvarez 5e3addcc41 chore: 🤖 Upgrade lint-staged to resolve yaml secvuln (#3310)
✅ Closes: https://github.com/hashicorp/boundary-ui/security/code-scanning/254

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2026-06-08 15:47:51 -07:00
Zhihe Li 576fef9f8a feat: 🎸 Update scope dropdown in login to show current scope (#3308)
* feat: 🎸 Update scope dropdown in login to show current scope

* test: 💍 Update e2e tests
2026-06-08 17:08:23 -04:00
dillanb-hashi b9517e0233 test: 💍 Allow webkit and firefox to tests to run on enterprise (#3305)
* test: 💍 Allow webkit and firefox to tests to run on enterprise
✅ Closes: ICU-18952
2026-06-05 08:45:28 -07:00
Lisbet Alvarez 4d7ce40469 fix: 🐛 newline being removed for existing import & fix transform errors for a11y ignores codemod (#3183)
* fix: 🐛 newline being removed for existing import & fix errors

* fix: 🐛 avoid testName being undefined
2026-06-04 17:00:56 -07:00
Dharini fa51973e6d chore: make sub claim mapping readonly after creation (#3306) 2026-06-04 15:40:24 -07:00
Lisbet Alvarez f80d7ebeb3 chore: 🤖 add override for tmp in electron-app to resolve cve (#3307) 2026-06-04 15:24:25 -07:00
Dharini 9aea1a8fd8 test: 💍 a11y (#3302) 2026-06-03 16:36:29 -07:00
Dharini 35377e8466 chore: 🤖 remove listwrapper usage (#3294) 2026-06-03 16:36:29 -07:00
Dharini 0e580e3c9f chore: migrate listwrapper Target and worker fields to keyvalue component (#3284) 2026-06-03 16:36:29 -07:00
Dharini e38d3afa58 Chore migrate credential library storage bucket (#3282) 2026-06-03 16:36:29 -07:00
Dharini 0e223ded8f chore: 🤖 migrate host catalog and host set list wrapper fields to key value (#3276) 2026-06-03 16:36:29 -07:00
Dharini 4e2b779d96 migrate ldap list wrapper fields (#3162) 2026-06-03 16:36:29 -07:00
Dharini 71ec7b465a chore: 🤖 migrate oidc fields to keyvalue component (#3160) 2026-06-03 16:36:29 -07:00
Dharini 8b870556a6 chore: 🤖 use hds keyvalue component (#3027) 2026-06-03 16:36:29 -07:00
Lisbet Alvarez ecefa39b98 fix: 🐛 actions not displaying for templates in grants editor (#3296)
* fix: 🐛 actions not displaying for templates in grants editor

* fix: 🐛 invalid ids check

* fix: 🐛 update check for ids type

* test: 💍 fix broken strings

* test: 💍 fix test case

* test: 💍 remove log
2026-06-03 12:46:34 -07:00
Susmitha Girumala 4a206c82dc chore: 🤖 Update openapi-generator-cli to resolve basic-ftp cve (#3303)
✅ Closes: https://github.com/hashicorp/boundary-ui-enterprise/security/code-scanning/287
2026-06-03 12:22:17 -07:00
Michael Li 2d0ed53202 test(e2e): Fix flakiness in host catalog navigation (#3291) 2026-06-02 15:51:42 -04:00
dependabot[bot]andPriya Patel 5000d98e23 chore(deps): bump hashicorp/setup-terraform from 4.0.0 to 4.0.1 (#3299)
Bumps [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform) from 4.0.0 to 4.0.1.
- [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/5e8dbf3c6d9deaf4193ca7a8fb23f2ac83bb6c85...dfe3c3f87815947d99a8997f908cb6525fc44e9e)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Priya Patel <priya.patel@hashicorp.com>
2026-06-01 17:29:20 -07:00
dependabot[bot] 4afd7c2d0b chore(deps): bump browser-actions/setup-chrome from 2.1.1 to 2.1.2 (#3300)
Bumps [browser-actions/setup-chrome](https://github.com/browser-actions/setup-chrome) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/browser-actions/setup-chrome/releases)
- [Changelog](https://github.com/browser-actions/setup-chrome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/browser-actions/setup-chrome/compare/4f8e94349a351df0f048634f25fec36c3c91eded...2e1d749697dd1612b833dba4a722266286fbefcd)

---
updated-dependencies:
- dependency-name: browser-actions/setup-chrome
  dependency-version: 2.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-01 16:55:28 -07:00
dependabot[bot]andPriya Patel 207b1e8a7c chore(deps): bump actions/labeler from 6.0.1 to 6.1.0 (#3298)
Bumps [actions/labeler](https://github.com/actions/labeler) from 6.0.1 to 6.1.0.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/634933edcd8ababfe52f92936142cc22ac488b1b...f27b608878404679385c85cfa523b85ccb86e213)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: 6.1.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: Priya Patel <priya.patel@hashicorp.com>
2026-06-01 16:41:29 -07:00
dependabot[bot]andPriya Patel 8b90db1ff5 chore(deps): bump slackapi/slack-github-action from 3.0.2 to 3.0.3 (#3297)
Bumps [slackapi/slack-github-action](https://github.com/slackapi/slack-github-action) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/slackapi/slack-github-action/releases)
- [Changelog](https://github.com/slackapi/slack-github-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/slackapi/slack-github-action/compare/03ea5433c137af7c0495bc0cad1af10403fc800c...45a88b9581bfab2566dc881e2cd66d334e621e2c)

---
updated-dependencies:
- dependency-name: slackapi/slack-github-action
  dependency-version: 3.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Priya Patel <priya.patel@hashicorp.com>
2026-06-01 16:06:40 -07:00
Zhihe Li 7fc10855d9 feat: 🎸 Add override to fix node 24 builds (#3301) 2026-06-01 18:39:45 -04:00
Lisbet Alvarez 7c3be7c9a0 chore: 🤖 upgrade @babel/preset-env to resolve cve (#3292) 2026-06-01 11:36:59 -07:00
Lisbet Alvarez 7cddf7cb91 Refactor utils to share components (#3279)
* refactor: 💡 initial refactor for utils to share components

* refactor: 💡 actions logic

* Add missing copyright headers

* refactor: 💡 simplify actions getter logic

* refactor: 💡 convert output fields logic into a separate getter

* test: 💍 fix unit test

* fix: 🐛 bug with unknown fields lint error

* refactor: 💡 pr feedback - simplify template check

* refactor: 💡 remove unnecessary unit test file
2026-05-29 16:52:00 -07:00
Zhihe Li 878bd241f3 feat: 🎸 Update playwright to newest version (#3290)
* feat: 🎸 Update playwright to newest version

* fix: 🐛 Fix cache dependency key
2026-05-29 19:23:04 -04:00
Susmitha Girumala 4aec0d3acc chore: 🤖 Upgrade fast-uri for cve (#3289)
✅ Closes: https://github.com/hashicorp/boundary-ui/security/code-scanning/333,
https://github.com/hashicorp/boundary-ui/security/code-scanning/334,
https://github.com/hashicorp/boundary-ui/security/code-scanning/335,
https://github.com/hashicorp/boundary-ui/security/code-scanning/336
2026-05-29 15:27:18 -04:00
Susmitha GirumalaandZhihe Li e43625f76c chore: 🤖 Upgrade tmp module for secvuln resolution (#3287)
* chore: 🤖 Upgrade tmp module for secvul cve-2026-44705

Resolves
https://github.com/hashicorp/boundary-ui/security/code-scanning/342

* chore: 🤖 Upgrade tmp to resolve desktop client secvuln

✅ Closes: https://github.com/hashicorp/boundary-ui/security/code-scanning/342

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2026-05-29 14:26:59 -04:00
Priya Patel 5b51edd17f fix: 🐛 updates node and pnpm setup order (#3286) 2026-05-29 10:36:17 -07:00
Dharini 6eb21d3e13 Display session playback error (#3280) 2026-05-29 09:54:55 -07:00
Susmitha Girumala 9b43819865 chore: 🤖 Upgrade xmldom for secvul resolution (#3288)
✅ Closes: https://github.com/hashicorp/boundary-ui/security/code-scanning/313,
https://github.com/hashicorp/boundary-ui/security/code-scanning/311,
https://github.com/hashicorp/boundary-ui/security/code-scanning/310,
https://github.com/hashicorp/boundary-ui/security/code-scanning/309
2026-05-29 12:07:55 -04:00
Zhihe Li 562b371db3 feat: 🎸 Update grant template names (#3283) 2026-05-29 10:18:42 -04:00
Zhihe Li 89d492042e feat: 🎸 Fix contrast issue with count badge in dropdown (#3285)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-19106
2026-05-28 09:59:48 -04:00
Lisbet Alvarez f9197d5a99 chore: 🤖 Upgrade electron to v42.0.1 (latest) (#3278) 2026-05-21 16:59:13 -07:00
Zhihe Li ebd7f64fe3 fix: 🐛 Add missing code block description (#3277)
* fix: 🐛 Add missing code block description

* feat: 🎸 Add autocomplete on empty lines
2026-05-20 18:29:40 -04:00
Zhihe Li 7dadc53fe1 Remove renderer url (#3194)
* feat: 🎸 Refactor how we store cluster URL
2026-05-20 16:36:16 -04:00
Zhihe Li 3d257afd49 refactor: 💡 Update transaction style and add busy timeout PRAGMA (#3271)
* refactor: 💡 Update transaction style and add busy PRAGMA

* refactor: 💡 Add return to insert statement for consistency

* refactor: 💡 Also add check for db

* test: 💍 Fix flaky test
2026-05-18 19:05:29 -04:00
Lisbet Alvarez 95918cb997 fix: 🐛 scrollbar color in dark mode + layout bugs (#3226)
* fix: 🐛 header scrollbar overlap in desktop

* refactor: 💡 undo desktop scrollbar changes

* refactor: 💡 fix whitespace issues when viewport is small

* fix: 🐛 scrollbar color issue in dark mode

* fix: 🐛 move style inside of media query
2026-05-15 15:01:19 -07:00
Lisbet Alvarez 077200d792 test: 💍 fix a11y violations and ignore existing issues (#3275)
* test: 💍 fix a11y violations and ignore existing issues

* test: 💍 remove ignores for fixed violation

* test: 💍 more color contrast ignores for new tests
2026-05-15 13:05:19 -07:00
Zhihe Li f34a1df298 refactor: 💡 Update e2e test for finding code editor (#3273)
* refactor: 💡 Update e2e test for finding code editor

* test: 💍 Added more acceptance tests
2026-05-15 12:40:37 -04:00
Zhihe Li 7fa59bfd5d feat: 🎸 Add support for output fields (#3268)
* feat: 🎸 Add support for output fields

* refactor: 💡 PR feedback
2026-05-14 15:21:30 -04:00
e0b80b1176 refactor: 💡 update pinned IDs logic for actions table (#3269)
* chore: 🤖 Add initial page layout for code editor + sidebar (#3180)

* chore: 🤖 Add initial page layout for code editor + sidebar

* test: 💍 add missing a11y ignores for exisitng color issue

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

* Replace `Rose::CodeEditor` with `Hds::CodeEditor` (#2679)

* chore: 🤖 replace Rose::CodeEditor with Hds::CodeEditor

- Remove CodeEditor 5 dependency

* chore: 🤖 Replace CodeMirror5 dep

remove CodeMirror5 and replace existing editors with HDS::CodeEditor

* chore: 🤖 deleting old codeeditor styles

* feat: 🎸 changing code editor

changing code editor

✅ Closes: 0

* removed unused export

* pr cleanup

* updating tests for new code editor

* responding to PR feedback

* added whitespace

* fixing linting violations

* chore: 🤖 self-review PR

self-review PR in the course of switching to new HDS code editor

* fix: 🐛 fix linting bug

* fix: 🐛 unneeded dependency

remove jslint dependency as this is handled in the new code editor from
HDS

* fix: 🐛 Fixing import bug

Fix import bug caused by importing scss modules that no longer exist

* Fix and refactor code editor acceptance test

* Fix and refactor code editor acceptance test

* chore: 🤖 remove codemirror dependency

* refactor: 💡 fix merge conflict issues

* test: 💍 update e2e test selectors

* test: 💍 fix target spec click event

* refactor: 💡 clean up test selectors for code editor

* refactor: 💡 clean up storage bucket test selectors

* chore: 🤖 remove code mirror modifiers

---------

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

* feat: 🎸 Create string formats component (#3191)

* feat: 🎸 Create string formats component

* Add missing copyright headers

* fix: 🐛 change to readonly

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

* feat: 🎸 add grant schema to mirage (#3196)

* feat: 🎸 add grant schema to mirage

* refactor: 💡 update grant schema mirage data

* refactor: 💡 fix route name in mirage

* feat: 🎸 add export options flyout (#3198)

* feat: 🎸 add export options flyout

* fix: 🐛 update id to be ids

* test: 💍 add a11y ignores

* test: 💍 fix tests for grant string format

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

* feat: 🎸 Add autocompletion to code editor (#3207)

* feat: 🎸 Add CSP nonce to code editors (#3230)

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* feat: 🎸 Add linting to code editor (#3211)

* feat: 🎸 Add linting to code editor

* refactor: 💡 add missing case for wildcard type & ids field

* refactor: 💡 simplify condition + add more tests

* refactor: 💡 cleanup ids validation logic and add more lint erro

* refactor: 💡 simplify logic and add actions linting cases

* feat: 🎸 Add autocompletion to code editor (#3207)

* refactor: 💡 apply PR feedback

* refactor: 💡 PR feedback

* refactor: 💡 add noop action

* fix: 🐛 noop should not be suggested with resource type format

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

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* Icu 18506 load resource IDs for autocomplete (#3247)

* feat: 🎸 Add id auto completion
* style: 💄 Fix code editor styling for dark mode
* feat: 🎸 Add optimization for caching sqlite data

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

* refactor: 💡 Update string formats to use select + add options (#3256)

* refactor: 💡 Update string formats to use select + add options

* refactor: 💡 PR feedback

* test: 💍 fix tests

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

* refactor: 💡 role grants tab to use code block (#3261)

* refactor: 💡 grants tab to use code block

* refactor: 💡 update getter comment

* test: 💍 fix tests

* refactor: 💡 remove language arg for codeblock

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

* Grant actions card (#3246)

* chore: 🤖 Add initial page layout for code editor + sidebar (#3180)

* chore: 🤖 Add initial page layout for code editor + sidebar

* test: 💍 add missing a11y ignores for exisitng color issue

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

* Replace `Rose::CodeEditor` with `Hds::CodeEditor` (#2679)

* chore: 🤖 replace Rose::CodeEditor with Hds::CodeEditor

- Remove CodeEditor 5 dependency

* chore: 🤖 Replace CodeMirror5 dep

remove CodeMirror5 and replace existing editors with HDS::CodeEditor

* chore: 🤖 deleting old codeeditor styles

* feat: 🎸 changing code editor

changing code editor

✅ Closes: 0

* removed unused export

* pr cleanup

* updating tests for new code editor

* responding to PR feedback

* added whitespace

* fixing linting violations

* chore: 🤖 self-review PR

self-review PR in the course of switching to new HDS code editor

* fix: 🐛 fix linting bug

* fix: 🐛 unneeded dependency

remove jslint dependency as this is handled in the new code editor from
HDS

* fix: 🐛 Fixing import bug

Fix import bug caused by importing scss modules that no longer exist

* Fix and refactor code editor acceptance test

* Fix and refactor code editor acceptance test

* chore: 🤖 remove codemirror dependency

* refactor: 💡 fix merge conflict issues

* test: 💍 update e2e test selectors

* test: 💍 fix target spec click event

* refactor: 💡 clean up test selectors for code editor

* refactor: 💡 clean up storage bucket test selectors

* chore: 🤖 remove code mirror modifiers

---------

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

* feat: 🎸 Create string formats component (#3191)

* feat: 🎸 Create string formats component

* Add missing copyright headers

* fix: 🐛 change to readonly

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

* feat: 🎸 add grant schema to mirage (#3196)

* feat: 🎸 add grant schema to mirage

* refactor: 💡 update grant schema mirage data

* refactor: 💡 fix route name in mirage

* feat: 🎸 add export options flyout (#3198)

* feat: 🎸 add export options flyout

* fix: 🐛 update id to be ids

* test: 💍 add a11y ignores

* test: 💍 fix tests for grant string format

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

* feat: 🎸 Add autocompletion to code editor (#3207)

* feat: 🎸 create grant actions component

* feat: 🎸 add description to actions

* feat: 🎸 update default logic to not show all actions

* feat: 🎸 show invalid id and type message

* test: 💍 create const for test selectors

* feat: 🎸 trigger action suggestion when cursor moves

* refactor: 💡 add createGrantLineHelpers func

* refactor: 💡 small refactors

* feat: 🎸 Add CSP nonce to code editors (#3230)

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 small refactor

* test: 💍 add more tests

* refactor: 💡 fix merge conflicts issues

* refactor: 💡 updates from PR feedback

* refactor: 💡 updates for completions and linting

* test: 💍 fix test issue with translations

* test: 💍 fix test issue that was already fixed once

* refactor: 💡 address PR feedback

---------

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
Co-authored-by: Zack Moore <zack.moore@hashicorp.com>
Co-authored-by: calcaide <ccorvo@hashicorp.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
Co-authored-by: Bharath Gajjala <120367134+bgajjala8@users.noreply.github.com>

* refactor: 💡 update pinned IDs logic for actions table

* refactor: 💡 use if/else in place of complex ternary

* refactor: 💡 user intl.formatList

---------

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
Co-authored-by: Zack Moore <zack.moore@hashicorp.com>
Co-authored-by: calcaide <ccorvo@hashicorp.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
Co-authored-by: Bharath Gajjala <120367134+bgajjala8@users.noreply.github.com>
2026-05-14 15:21:30 -04:00
Zhihe Li 0479c3c8fc test: 💍 Fix broken tests after new code editor (#3213) 2026-05-14 15:21:30 -04:00
08b8b03fed Grant actions card (#3246)
* chore: 🤖 Add initial page layout for code editor + sidebar (#3180)

* chore: 🤖 Add initial page layout for code editor + sidebar

* test: 💍 add missing a11y ignores for exisitng color issue

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

* Replace `Rose::CodeEditor` with `Hds::CodeEditor` (#2679)

* chore: 🤖 replace Rose::CodeEditor with Hds::CodeEditor

- Remove CodeEditor 5 dependency

* chore: 🤖 Replace CodeMirror5 dep

remove CodeMirror5 and replace existing editors with HDS::CodeEditor

* chore: 🤖 deleting old codeeditor styles

* feat: 🎸 changing code editor

changing code editor

✅ Closes: 0

* removed unused export

* pr cleanup

* updating tests for new code editor

* responding to PR feedback

* added whitespace

* fixing linting violations

* chore: 🤖 self-review PR

self-review PR in the course of switching to new HDS code editor

* fix: 🐛 fix linting bug

* fix: 🐛 unneeded dependency

remove jslint dependency as this is handled in the new code editor from
HDS

* fix: 🐛 Fixing import bug

Fix import bug caused by importing scss modules that no longer exist

* Fix and refactor code editor acceptance test

* Fix and refactor code editor acceptance test

* chore: 🤖 remove codemirror dependency

* refactor: 💡 fix merge conflict issues

* test: 💍 update e2e test selectors

* test: 💍 fix target spec click event

* refactor: 💡 clean up test selectors for code editor

* refactor: 💡 clean up storage bucket test selectors

* chore: 🤖 remove code mirror modifiers

---------

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

* feat: 🎸 Create string formats component (#3191)

* feat: 🎸 Create string formats component

* Add missing copyright headers

* fix: 🐛 change to readonly

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

* feat: 🎸 add grant schema to mirage (#3196)

* feat: 🎸 add grant schema to mirage

* refactor: 💡 update grant schema mirage data

* refactor: 💡 fix route name in mirage

* feat: 🎸 add export options flyout (#3198)

* feat: 🎸 add export options flyout

* fix: 🐛 update id to be ids

* test: 💍 add a11y ignores

* test: 💍 fix tests for grant string format

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

* feat: 🎸 Add autocompletion to code editor (#3207)

* feat: 🎸 create grant actions component

* feat: 🎸 add description to actions

* feat: 🎸 update default logic to not show all actions

* feat: 🎸 show invalid id and type message

* test: 💍 create const for test selectors

* feat: 🎸 trigger action suggestion when cursor moves

* refactor: 💡 add createGrantLineHelpers func

* refactor: 💡 small refactors

* feat: 🎸 Add CSP nonce to code editors (#3230)

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 small refactor

* test: 💍 add more tests

* refactor: 💡 fix merge conflicts issues

* refactor: 💡 updates from PR feedback

* refactor: 💡 updates for completions and linting

* test: 💍 fix test issue with translations

* test: 💍 fix test issue that was already fixed once

* refactor: 💡 address PR feedback

---------

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
Co-authored-by: Zack Moore <zack.moore@hashicorp.com>
Co-authored-by: calcaide <ccorvo@hashicorp.com>
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
Co-authored-by: Bharath Gajjala <120367134+bgajjala8@users.noreply.github.com>
2026-05-14 15:21:29 -04:00
Lisbet Alvarez 1a8c895ea9 refactor: 💡 role grants tab to use code block (#3261)
* refactor: 💡 grants tab to use code block

* refactor: 💡 update getter comment

* test: 💍 fix tests

* refactor: 💡 remove language arg for codeblock

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-18757
2026-05-14 15:21:29 -04:00
Lisbet Alvarez 990146fa34 refactor: 💡 Update string formats to use select + add options (#3256)
* refactor: 💡 Update string formats to use select + add options

* refactor: 💡 PR feedback

* test: 💍 fix tests

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-18983
2026-05-14 15:21:29 -04:00
Zhihe Li e5657a8d4c Icu 18506 load resource IDs for autocomplete (#3247)
* feat: 🎸 Add id auto completion
* style: 💄 Fix code editor styling for dark mode
* feat: 🎸 Add optimization for caching sqlite data

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-18506
2026-05-14 15:21:29 -04:00
Lisbet AlvarezandZhihe Li 1d126dc074 feat: 🎸 Add linting to code editor (#3211)
* feat: 🎸 Add linting to code editor

* refactor: 💡 add missing case for wildcard type & ids field

* refactor: 💡 simplify condition + add more tests

* refactor: 💡 cleanup ids validation logic and add more lint erro

* refactor: 💡 simplify logic and add actions linting cases

* feat: 🎸 Add autocompletion to code editor (#3207)

* refactor: 💡 apply PR feedback

* refactor: 💡 PR feedback

* refactor: 💡 add noop action

* fix: 🐛 noop should not be suggested with resource type format

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

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2026-05-14 15:21:29 -04:00
Bharath GajjalaandZhihe Li dc224268f5 feat: 🎸 Add CSP nonce to code editors (#3230)
Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2026-05-14 15:21:28 -04:00
Zhihe Li 4c15d72321 feat: 🎸 Add autocompletion to code editor (#3207) 2026-05-14 15:21:28 -04:00
Lisbet Alvarez add2a9d6c4 feat: 🎸 add export options flyout (#3198)
* feat: 🎸 add export options flyout

* fix: 🐛 update id to be ids

* test: 💍 add a11y ignores

* test: 💍 fix tests for grant string format

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-18524
2026-05-14 15:21:28 -04:00
Cameron Perera 759c1f5555 feat: 🎸 add grant schema to mirage (#3196)
* feat: 🎸 add grant schema to mirage

* refactor: 💡 update grant schema mirage data

* refactor: 💡 fix route name in mirage
2026-05-14 15:21:28 -04:00
Lisbet Alvarez 37de7e3480 feat: 🎸 Create string formats component (#3191)
* feat: 🎸 Create string formats component

* Add missing copyright headers

* fix: 🐛 change to readonly

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-18458
2026-05-14 15:21:28 -04:00
d469f305de Replace Rose::CodeEditor with Hds::CodeEditor (#2679)
* chore: 🤖 replace Rose::CodeEditor with Hds::CodeEditor

- Remove CodeEditor 5 dependency

* chore: 🤖 Replace CodeMirror5 dep

remove CodeMirror5 and replace existing editors with HDS::CodeEditor

* chore: 🤖 deleting old codeeditor styles

* feat: 🎸 changing code editor

changing code editor

✅ Closes: 0

* removed unused export

* pr cleanup

* updating tests for new code editor

* responding to PR feedback

* added whitespace

* fixing linting violations

* chore: 🤖 self-review PR

self-review PR in the course of switching to new HDS code editor

* fix: 🐛 fix linting bug

* fix: 🐛 unneeded dependency

remove jslint dependency as this is handled in the new code editor from
HDS

* fix: 🐛 Fixing import bug

Fix import bug caused by importing scss modules that no longer exist

* Fix and refactor code editor acceptance test

* Fix and refactor code editor acceptance test

* chore: 🤖 remove codemirror dependency

* refactor: 💡 fix merge conflict issues

* test: 💍 update e2e test selectors

* test: 💍 fix target spec click event

* refactor: 💡 clean up test selectors for code editor

* refactor: 💡 clean up storage bucket test selectors

* chore: 🤖 remove code mirror modifiers

---------

Co-authored-by: calcaide <ccorvo@hashicorp.com>
Co-authored-by: cameronperera <cameron.perera@hashicorp.com>
2026-05-14 15:21:27 -04:00
Lisbet Alvarez fd1eba617b chore: 🤖 Add initial page layout for code editor + sidebar (#3180)
* chore: 🤖 Add initial page layout for code editor + sidebar

* test: 💍 add missing a11y ignores for exisitng color issue

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-18460
2026-05-14 15:21:27 -04:00
Zhihe Li 5048fd478a feat: 🎸 Handle rate limiting (#3257)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-12035
2026-05-14 15:21:07 -04:00
Susmitha Girumala de907284ff chore: 🤖 Upgrade path-to-regexp to latest (#3260)
* chore: 🤖 Upgrade path-to-regexp to latest

Fix multiple path-to-regexp sec vulns up upgrading to latest possible
versions. This fixes:
- https://github.com/hashicorp/boundary-ui/security/code-scanning/272
- https://github.com/hashicorp/boundary-ui/security/code-scanning/269
- https://github.com/hashicorp/boundary-ui/security/code-scanning/266

* chore: 🤖 Resolve broken pnpm lockfile after merge with install
2026-05-14 11:32:21 -04:00
Zhihe Li 6e9fe1c675 docs: ✏️ Add documentation for pnpm overrides (#3263) 2026-05-13 12:54:34 -04:00
Cameron Perera 6b29a875f3 test: 💍 update json credential flaky tests (#3267)
* test: 💍 update json credential flaky tests

* test: 💍 add commonSelector for code mirror editor
2026-05-13 11:26:41 -05:00
Michael Li 1fd638618b doc: No more enos variables (#3262) 2026-05-13 09:51:13 -04:00
dependabot[bot] 6704a251e0 chore(deps): bump pnpm/action-setup from 5.0.0 to 6.0.8 (#3249)
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 5.0.0 to 6.0.8.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/fc06bc1257f339d1d5d8b3a19a8cae5388b55320...0e279bb959325dab635dd2c09392533439d90093)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: 6.0.4
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-12 16:47:41 -04:00
Zhihe Li 46ed965360 chore: 🤖 Update node version (#3265) 2026-05-12 16:02:21 -04:00
Susmitha Girumala 283e128139 chore: 🤖 Fix axios cve-2026-42038 (#3259)
* chore: 🤖 Fix axios cve-2026-42038 by adding override to latest

✅ Closes: https://github.com/hashicorp/boundary-ui/security/code-scanning/327

* chore: 🤖 Undo axios override in favour of updating parent mod

Update openapi-generator-cli instead of dependent axios
2026-05-11 15:05:08 -04:00
Zhihe Li 047db02a65 fix: 🐛 Add extra check for SQLite errors (#3258) 2026-05-08 10:30:05 -04:00
Zhihe Li bd837a6383 fix: 🐛 Fix race condition from sqlite initialization (#3253) 2026-05-05 10:25:40 -04:00
dependabot[bot] 2a6fac66fc chore(deps-dev): bump postcss from 8.5.3 to 8.5.10 (#3255) 2026-05-04 16:17:13 -07:00
dependabot[bot] 4bdcd4ce69 chore(deps): bump actions/setup-node from 6.3.0 to 6.4.0 (#3252) 2026-05-04 15:21:37 -07:00
dependabot[bot] 9f76650dfb chore(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1 (#3251) 2026-05-04 14:51:54 -07:00
dependabot[bot] c33d1718a2 chore(deps): bump slackapi/slack-github-action from 3.0.1 to 3.0.2 (#3250) 2026-05-04 14:07:44 -07:00
Priya Patel 923dedc9bb fix: 🐛 hides preferred clients section for linux (#3241) 2026-04-24 10:31:42 -07:00
dependabot[bot] 2d9b9d9659 chore(deps): bump uuid from 11.1.0 to 14.0.0 (#3245)
Bumps [uuid](https://github.com/uuidjs/uuid) from 11.1.0 to 14.0.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v11.1.0...v14.0.0)

---
updated-dependencies:
- dependency-name: uuid
  dependency-version: 14.0.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-24 09:41:13 -04:00
Michael Li 6d7e24fdc5 chore(e2e): Log in via CLI during global setup to update cache (#3235)
* chore(e2e): log in via CLI

* CR

* CR: Rename ci option
2026-04-23 11:57:24 -04:00
Dharini 4f9086642b fix: 🐛 refresh action in session recording (#3229) 2026-04-22 10:54:50 -07:00
Susmitha Girumala 337963bff8 chore: 🤖 Upgrade socket.io-parser to fix sec vuln (#3244)
Fixes CVE 2026 33151

✅ Closes: https://github.com/hashicorp/boundary-ui/security/dependabot/269
2026-04-22 12:25:35 -04:00
Cameron Perera b87ed9f3db chore: 🤖 bump xmldom in electron-app (#3243) 2026-04-21 15:40:03 -05:00
dependabot[bot]andcameronperera 95b78299f9 chore(deps): bump brace-expansion from 1.1.12 to 1.1.13 in /ui/desktop/electron-app (#3210)
* chore(deps): bump brace-expansion in /ui/desktop/electron-app

Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.13.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.13)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.13
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: 🤖 bump brace-expansion package

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: cameronperera <cameron.perera@hashicorp.com>
2026-04-21 13:39:20 -05:00
Cameron Perera cf0df900e0 chore: 🤖 bump lodash to 4.18.1 (#3242) 2026-04-21 11:36:01 -05:00
dependabot[bot]andcameronperera 214304dc8c chore(deps): bump lodash from 4.17.23 to 4.18.1 in /ui/desktop/electron-app (#3236)
* chore(deps): bump lodash in /ui/desktop/electron-app

Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: 🤖 bump lodash version in electron-app

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: cameronperera <cameron.perera@hashicorp.com>
2026-04-21 10:55:03 -05:00
Susmitha Girumala ed8075d200 chore: 🤖 Update flatted dep to latest (#3240)
Update flatted to latest >=3.4.0 version to fix DoS vuln CVE-2026-32141
2026-04-17 10:00:59 -04:00
Susmitha Girumala 07089e97e2 chore: 🤖 Update immutable to fix CVE 2026 29063 (#3237)
* chore: 🤖 Update immutable to fix CVE 2026 29063

Tag immutable to latest 5.1.5 version to fix prototype pollution vuln

✅ Closes: https://github.com/hashicorp/boundary-ui/security/code-scanning/239

* chore: 🤖 Undo immutable override in favor of updating only deps
2026-04-15 11:59:27 -04:00
Dharini 14b3c8c6d0 fix: 🐛 @xmldom/xmldom version update (#3238) 2026-04-14 14:21:57 -07:00
Zhihe Li 6580350dcf feat: 🎸 Update AWS host catalog fields to be required (#3214) 2026-04-13 16:33:41 -04:00
Michael Li 51be681758 chore: Always run end-to-end tests (#3234)
* chore: Always run e2e tests

* chore: Parallelize browsers
2026-04-13 15:08:21 -04:00
Susmitha Girumala dab50e352d chore: 🤖 Update underscore to fix vulnerability (#3231)
* chore: 🤖 Update underscore to fix vulnerability

Code scanning identified a potential DoS attach for underscore versions
not using latest 1.13.8 release

✅ Closes: https://github.com/jashkenas/underscore/issues/3011

* chore: 🤖 Remove nomnom module underscore override
2026-04-09 16:14:45 -04:00
dependabot[bot] f3af41dea4 chore(deps): bump hashicorp/action-setup-enos from 1.50 to 1.52 (#3221) 2026-04-08 09:51:01 -07:00
dependabot[bot] fb3f88a77d chore(deps): bump slackapi/slack-github-action from 2.1.1 to 3.0.1 (#3223) 2026-04-08 09:08:54 -07:00
dependabot[bot] 7345c79b20 chore(deps): bump actions/setup-go from 6.0.0 to 6.4.0 (#3220) 2026-04-07 16:18:41 -07:00
dependabot[bot] 9ed79be3ef chore(deps): bump actions/setup-node from 6.2.0 to 6.3.0 (#3222) 2026-04-07 15:37:22 -07:00
dependabot[bot] 7614f17efb chore(deps): bump pnpm/action-setup from 4.2.0 to 5.0.0 (#3219) 2026-04-07 11:59:18 -07:00
Lisbet Alvarez ec698d5672 chore: 🤖 update desktop client changelog and version (#3217)
* chore: 🤖 update desktop client changelog and version
2026-04-03 12:28:15 -07:00
Priya Patel 266f10d1eb Fix terminal view lag while route changes (#3228)
* fix: 🐛 fixed terminal view being visible after route change

* test: 💍 fixed tests

* chore: 🤖 used willTransition hook

* chore: 🤖 hides terminal view on willtransition

* fix: 🐛 removed unneccessary await from hideTerminalView

* chore: 🤖 removed extra hideterminalview call

* chore: 🤖 removed settabactive on failure
2026-04-03 12:11:46 -07:00
Priya Patel e30168c55a fix: 🐛 DC e2e tests (#3216)
* fix: 🐛 fixed DC e2e tests

* chore: 🤖 addressed feedback
2026-04-03 11:49:45 -07:00
Cameron Perera 4e7d6ba57e fix: 🐛 add default value to spawn options param (#3227) 2026-04-03 09:59:18 -07:00
Zhihe Li f3968d353d chore: 🤖 Update dependency for handlebars (#3215) 2026-03-31 13:05:00 -04:00
dependabot[bot]andZhihe Li 33055d6095 chore(deps): bump picomatch from 2.3.1 to 2.3.2 in /ui/desktop/electron-app (#3209)
* chore(deps): bump picomatch in /ui/desktop/electron-app

Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: 🤖 Update picomatch

---------

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>
2026-03-31 12:39:59 -04:00
Priya Patel f48e6dc049 Refactor: Load terminal using web contents view (#3190)
* chore: 🤖 create terminal preload

* chore: 🤖 created terminal-manager service and updated handlers

* chore: 🤖 adds terminal view and bundling script

* chore: 🤖 addede terminal service, updated tabs component

* chore: 🤖 hides terminal on signout modal

* test: 💍 added terminal service tests

* chore: 🤖 removed debug file

* chore: 🤖 adds windows event handler

* docs: ✏️ adds jsdoc for terminal view

* chore: 🤖 removed xterm dependency from desktop package.json

* chore: 🤖 updated sessionId check

* chore: 🤖 fixed zoom sync with main window

* chore: 🤖 adds CSP for terminal view

* chore: 🤖 hides terminal on error

* chore: 🤖 cleamup listener, fixed failing tests

* chore: 🤖 fixed terminal view cleanup

* chore: 🤖 addressed feedback

* fix: 🐛 adds null check for destroy, hdie terminal view

* fix: 🐛 fixed terminal view on logout/app quit modal

* fix: 🐛 fixed hidding modal on app quit

* chore: 🤖 addressed feedback

* chore: 🤖 hides terminal view when sidenav is expanded

* chore: 🤖 removed canDisplayExistingTerminal
2026-03-30 10:08:55 -07:00
Priya Patel 605b7940e3 fix: 🐛 electron IPC error handling (#3208)
* fix: 🐛 fixed electron error handling

* chore: 🤖 addressed feedback

* chore: 🤖 removed error.name, return error as is from main

* chore: 🤖 updated error name

* chore: 🤖 adds new error on renderer side

* chore: 🤖 send error message only

* chore: 🤖 adds error fallback
2026-03-27 14:26:31 -07:00
Cameron Perera 7454ecf57a fix: 🐛 resolve update credential error bug (#3201) 2026-03-25 16:09:56 -05:00
Michael Li 28b185bec8 fix(e2e): Update vault addresses to work in AWS (#3206) 2026-03-25 12:06:19 -04:00
Cameron Perera e345946c7d docs: ✏️ update e2e readme (#3205) 2026-03-23 10:18:04 -05:00
Michael Li 6c3a57b599 chore(e2e): Update e2e tests to work for boundary-ui-enterprise (#3197)
* test: 💍 Update usage of Vault addresses

* chore: 🤖 Update admin ui e2e tests for boundary-ui-enterprise

* chore: 🤖 Update desktop e2e tests for boundary-ui-enterprise
2026-03-19 10:26:49 -04:00
Blake Ryder 52e36e6463 Update LICENSE (#3195) 2026-03-16 15:48:37 +05:30
Priya Patel 392e49bf49 refactor: 💡 window postmessage pattern -> contextbridge boundary api (#3167)
* refactor: 💡 postmessage pattern -> contextbridge boundary api

* refactor: 💡 use sinon stub for boundary api mock test helper

* refactor: 💡 updated tests

* refactor: 💡 renamed boundary mock api

* chore: 🤖 addressed feedback

* refactor: 💡 updated context bridge name, added nested objects
2026-03-13 15:14:38 -07:00
Lisbet Alvarez eba17d3c71 chore: 🤖 bump node tar to 7.5.10 (#3193) 2026-03-10 14:31:37 -07:00
Lisbet Alvarez cdfeee3916 chore: 🤖 bump webpack to v5.105.4 (#3192) 2026-03-10 10:57:36 -07:00
dependabot[bot]andLisbet Alvarez f59603d70a chore(deps): bump hashicorp/action-setup-enos from 1.40 to 1.50 (#3188)
Bumps [hashicorp/action-setup-enos](https://github.com/hashicorp/action-setup-enos) from 1.40 to 1.50.
- [Commits](https://github.com/hashicorp/action-setup-enos/compare/80a17fa25605989a7a53199137dae1244e32353f...17b90fcf9591275b468a94aefb9dc6a93017de8a)

---
updated-dependencies:
- dependency-name: hashicorp/action-setup-enos
  dependency-version: '1.50'
  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: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2026-03-09 16:42:42 -07:00
dependabot[bot] 638dbff235 chore(deps): bump hashicorp/setup-terraform from 3.1.2 to 4.0.0 (#3187)
Bumps [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform) from 3.1.2 to 4.0.0.
- [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/b9cd54a3c349d3f38e8881555d616ced269862dd...5e8dbf3c6d9deaf4193ca7a8fb23f2ac83bb6c85)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 15:50:06 -07:00
Lisbet Alvarez e310b5abfa Add e2e test for target sort and modify e2e dc testing workflow to build binary (#3176)
* test: 💍 add e2e test case for sort target name

* chore: 🤖 update desktop e2e workflow to use boundary ent repo

* fix: 🐛 make sure org is fully loaded before sorting

* fix: 🐛 add missing step to move binary to correct folder

* refactor: 💡 update to wait for table load in test

* test: 💍 validate cache status

* fix: 🐛 remove unneeded flag so tests use enos binary

* refactor: 💡 use commit from ui-ent repo to build binary

* fix: 🐛 update selector due to changes from main merge

* fix: 🐛 update selector for dropdown link

* fix: 🐛 reopen dropdown after switching org + add workflow input

* docs: ✏️ clean up comments in workflow file
2026-03-05 12:41:45 -08:00
Cameron Perera b63ea6eee0 fix: 🐛 clean up sessions tracking in session manager (#3150)
* fix: 🐛 clean up sessions tracking in session manager

* refactor: 💡 PR feedback

* fix: 🐛 add onClose event listener to clean up sessions

* refactor: 💡 update to async/await

* refactor: 💡 move close event after spawn

* refactor: 💡 move onClose session handler to spawn onClose
2026-03-05 12:02:38 -06:00
dependabot[bot]andLisbet Alvarez 780740f2f2 chore(deps): bump actions/upload-artifact from 6.0.0 to 7.0.0 (#3186)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/b7c566a772e6b6bfb58ed0dc250532a479d7789f...bbbca2ddaa5d8feaa63e36b76fdaad77386f024f)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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>
2026-03-04 13:03:36 -08:00
dependabot[bot]andLisbet Alvarez 163758a1cb chore(deps): bump browser-actions/setup-chrome from 2.1.0 to 2.1.1 (#3185)
Bumps [browser-actions/setup-chrome](https://github.com/browser-actions/setup-chrome) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/browser-actions/setup-chrome/releases)
- [Changelog](https://github.com/browser-actions/setup-chrome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/browser-actions/setup-chrome/compare/b94431e051d1c52dcbe9a7092a4f10f827795416...4f8e94349a351df0f048634f25fec36c3c91eded)

---
updated-dependencies:
- dependency-name: browser-actions/setup-chrome
  dependency-version: 2.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

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>
2026-03-03 15:13:27 -08:00
Lisbet Alvarez e91bf99f6d chore: 🤖 Uprage HDS to v6.0.0 (#3184) 2026-03-03 10:17:18 -08:00
Zhihe LiandZedLi 43c9389b69 feat: 🎸 Add grant templates for roles (#3115)
* feat: 🎸 Add grant templates for roles

* test: 💍 Add a11y ignore

* fix: 🐛 Add selected text

* test: 💍 Update tests

* refactor: 💡 Update manage scope styles to be consistent as well

* Add missing copyright headers

---------

Co-authored-by: ZedLi <5783847+ZedLi@users.noreply.github.com>
2026-03-03 12:32:53 -05:00
Zhihe Li 79b6360c30 chore: 🤖 Update open api tools for basic-ftp (#3182)
* chore: 🤖 Update open api tools for basic-ftp

* chore: 🤖 Update ajv deps
2026-02-27 18:12:31 -05:00
dependabot[bot]andZhihe Li 93d709f7ba chore(deps): bump ajv from 8.17.1 to 8.18.0 in /ui/desktop/electron-app (#3172)
* chore(deps): bump ajv from 8.17.1 to 8.18.0 in /ui/desktop/electron-app

Bumps [ajv](https://github.com/ajv-validator/ajv) from 8.17.1 to 8.18.0.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v8.17.1...v8.18.0)

---
updated-dependencies:
- dependency-name: ajv
  dependency-version: 8.18.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: 🤖 Upgrade ajv

---------

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>
2026-02-27 13:51:49 -05:00
Zhihe Li 999c21c66a Upgrade eslint (#3175)
* chore: 🤖 Upgrade eslint config for admin ui

* chore: 🤖 Fix eslint issues for admin

* chore: 🤖 Upgrade eslint config for desktop

* chore: 🤖 Fix linting errors in desktop

* chore: 🤖 Upgrade eslint for api addon

* chore: 🤖 Fix eslint issues in api addon

* chore: 🤖 Upgrade eslint for auth addon

* chore: 🤖 Fix eslint issues in auth addon

* chore: 🤖 Upgrade core eslint config

* chore: 🤖 Fix eslint issue for core addon

* chore: 🤖 Upgrade eslint config for rose addon

* chore: 🤖 Fix eslint issue for rose addon

* chore: 🤖 Upgrade e2e eslint config

* chore: 🤖 Fix eslint issues in e2e

* chore: 🤖 Fix CI linting issues

* chore: 🤖 Add back linting server files for the future

* chore: 🤖 Update qunit rules to use extends
2026-02-27 13:32:27 -05:00
Lisbet Alvarez d6e8e58ca1 feat: 🎸 Add sorting to sessions started column (#3174)
* feat: 🎸 Add sorting to sessions started column

* test: 💍 add missing a11y ignores for existing color issue

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-18520
2026-02-26 09:28:00 -08:00
Zhihe Li df24ba6a15 chore: 🤖 Update minimatch to latest versions for security alert (#3179) 2026-02-25 17:35:21 -05:00
Lisbet Alvarez b1b49edb39 Refactor hds side nav to hds app side nav and header (#3032)
* refactor: 💡 use hds app header and app side nav

* style: 💄 fix dark-mode colors for side nav and app header

* style: 💄 cleanup

* style: 💄 simplify selector

* refactor: 💡 move util (param finder) to core addon

* refactor: 💡 move scope picker to core addon

* refactor: 💡 use hds header and app side nav in ui/desktop

* refactor: 💡 clean up ui/desktop files

* refactor: 💡 remove uneeded header components

* refactor: 💡 remove uneeded global layout

* Add missing copyright headers

* style: 💄 adjust foreground and background colors to fix contras

* style: 💄 remove uneeded stylelint disables

* style: 💄 fix dark mode styling in desktop ui

* refactor: 💡 readd user-select style

* test: 💍 fix tests + e2e tests for admin and desktop UIs

* refactor: 💡 clean up uneeded main elements and fix color link

* Add missing copyright headers

* fix: 🐛 e2e test selectors for ui/desktop

* style: 💄 revert link color change

* refactor: 💡 remove hds override

* fix: 🐛 scope dropdown for desktop

* fix: 🐛 max-height to desktop scope dropdown

* Add missing copyright headers

* chore: 🤖 update lockfile due to webpack update
2026-02-25 13:55:36 -08:00
Zhihe Li aaabfbe54d chore: 🤖 Update node-tar (#3178) 2026-02-25 15:14:23 -05:00
Zhihe Li 51ee5b2b20 chore: 🤖 Resolve dependabot alert for @isaacs/brace-expansion (#3177) 2026-02-24 17:09:02 -05:00
hashicc 566a02cbeb chore: 🤖 bump ember-resolver to v13 (#3096) 2026-02-24 15:24:44 -05:00
hashiccandLisbet Alvarez 3a847605ed Reapply ember-can upgrade (#3111)
* chore: 🤖 reapply previous ember-can upgrade from #3093

* chore: 🤖 add missing ember-inflector dependency

* chore: 🤖 move @ember/string to be a dependency in desktop

* chore: 🤖 re-run pnpm install to resolve lockfile dupe key error

* chore: 🤖 remove unused abilities service injections

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

---------

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2026-02-24 13:48:34 -05:00
Lisbet Alvarez 772857dbad Icu 18518 UI add sorting support to cache daemon handler (#3168)
* feat: 🎸 add sorting support & sort feature on targets name column

* test: 💍 cleanup and add tests

* refactor: 💡 remove log

* fix: 🐛 dont add undefined/null values from sort to query

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-18518
2026-02-19 10:38:54 -08:00
Michael Li 9e069ffc0c chore(e2e): Continue on error if clean up test infra fails (#3170) 2026-02-17 14:11:35 -05:00
dependabot[bot] ba77e9dd1b chore(deps-dev): bump webpack from 5.99.8 to 5.104.1 (#3166) 2026-02-16 15:06:44 -08:00
Cameron Perera ea1e7a99de fix: 🐛 update isRunning to check exitCode (#3148)
* fix: 🐛 update isRunning to check exitCode

* chore: 🤖 fix logic check for isRunning

* refactor: 💡 add signalCode check for isRunning
2026-02-13 17:13:59 -06:00
hashicc 46ededd676 chore: 🤖 add missing dependency on ember-inflector (#3094) 2026-02-10 15:05:45 -05:00
Zhihe Li b2b42cafd4 feat: 🎸 Update HDS to 5.2.0 (#3127)
* feat: 🎸 Update HDS to 5.2.0

* refactor: 💡 Make ember-get-config a dep for api addon

* chore: 🤖 Remove extra package overrides
2026-02-09 15:55:56 -05:00
Michael Li b6154cb1f7 test(admin/e2e): Add exact option to selector (#3165) 2026-02-05 12:31:36 -05:00
Lisbet Alvarez ebe5ae5f19 chore: 🤖 Ad ember-a11y-ignore to existing violations (#3159) 2026-02-04 14:43:15 -08:00
dependabot[bot] f8af37db43 chore(deps): bump actions/checkout from 6.0.1 to 6.0.2 (#3157)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/8e8c483db84b4bee98b60c0593521ed34d9990e8...de0fac2e4500dabe0009e67214ff5f5447ce83dd)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 12:39:21 -05:00
dependabot[bot] 4de3b5a61f chore(deps): bump actions/setup-node from 6.1.0 to 6.2.0 (#3156)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/395ad3262231945c25e8478fd5baf05154b1d79f...6044e13b5dc448c55e2357c09f80417699197238)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.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>
2026-02-04 12:00:31 -05:00
Cameron Pereraandcameronperera 3829301c24 chore: 🤖 add node set up step to codeql analysis (#3153)
* chore: 🤖 add node set up step to codeql analysis

* Add missing copyright headers

---------

Co-authored-by: cameronperera <29386339+cameronperera@users.noreply.github.com>
2026-02-03 15:09:31 -06:00
Cameron Pereraandcameronperera e68e17c5d4 chore: 🤖 remove final lodash@4.17.21 reference (#3154)
* chore: 🤖 remove final lodash@4.17.21 reference

* Add missing copyright headers

---------

Co-authored-by: cameronperera <29386339+cameronperera@users.noreply.github.com>
2026-02-03 14:38:52 -06:00
hashiccandZhihe Li 63b810d53f Migrate from ember-cli-mirage to miragejs (#3088)
* chore: 🤖 import explicit mirage references

* chore: 🤖 add mirage setupMirage helper

* chore: 🤖 working example with application adapter test

* chore: 🤖 use internal setupMirage test helper from api addon

* chore: 🤖 conditionally load mirage

* chore: 🤖 filter mirage folder inclusion in production builds

* chore: 🤖 drop ember-mirage and use our own test helpers

* chore: 🤖 collapse reference to import declaration

* docs: ✏️ add comment better explaining the mirage test env

* chore: 🤖 update configuration and manage mirage-related deps

* fix: 🐛 restore ipc mock and add missing checkOS handler

* chore: 🤖 add comment explaining omitting mirage deps in build

* chore: 🤖 allow mirage.enabled to include deps and handlers

* chore: 🤖 re-enable mirage for core dummy app

* Add missing copyright headers

* chore: 🤖 use embroider macros to conditionally start mirage

* docs: ✏️ update api readme for mirage changes

* chore: 🤖 replace remaining ember-cli-mirage references

* chore: 🤖 add mirage to test builds

* fix: 🐛 ensure that auto mirage start doesn't happen in test env

* chore: 🤖 use const instead of var

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* refactor: 💡 use cleaner logic for excluded api build modules

* fix: 🐛 handle issue where importSync was too eager

This was fixed by bumping the @embroider/macros dependency that includes
a fix to this issue:
https://github.com/embroider-build/embroider/pull/2511

* refactor: 💡 move mirage from addon to app directory

* refactor: 💡 update mirage test helper to be a factory

* chore: 🤖 exclude mirage directory when necessary at build time

* chore: 🤖 add miragejs as admin dev dependency

* refactor: 💡 update reference to startMirage

* chore: 🤖 update local mirage test helper

* chore: 🤖 change import path for mirage on desktop

* chore: 🤖 update imports in tests for startMirage

* chore: 🤖 update startMirage imports for api addon tests

* chore: 🤖 add miragejs dev dep to desktop

* docs: ✏️ update README

* chore: 🤖 set up setupMirage for core tests

* chore: 🤖 fix copyright header

* Add missing copyright headers

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2026-02-03 13:54:32 -05:00
hashicc 72fa6d86c4 Update copyright headers (#3161)
* chore: 🤖 remove hashi copyright .github headers and update config

* chore: 🤖 remove remaining hashicorp copyright headers

* Add missing copyright headers
2026-02-03 12:08:35 -05:00
Priya Patel 1780077068 Replace time element with Hds::Time component (#3112)
* refactor: 💡 use Hds::Time component

* refactor: 💡 fix data test selector

* refactor: 💡 standardardized date/time format

* refactor: 💡 fix tests and remove date helpers

* fix: 🐛 fixed helper test import
2026-02-02 18:52:19 -06:00
Michael Li 1e49283a33 test(admin/e2e): Ensure worker filter textbox is selected before proceeding (#3152) 2026-02-02 12:27:25 -05:00
Cameron Perera 6f7138be46 chore: 🤖 bump lodash to 4.17.23 (#3149) 2026-01-30 08:22:03 -06:00
Kristin Bradley 709d6e0be8 fix: 🐛 Update SideNav dropdown and button color style overrides (#3136)
Update SideNav dropdown and button color style overrides to continue
working with newer HDS versions

✅ Closes: HDS-5908
2026-01-29 10:55:24 -08:00
Lisbet Alvarez 3ba93927fe Update copyright headers (#3146)
* empty commit

* Add missing copyright headers

* chore: 🤖 update copywrite config file with correct year

* Add missing copyright headers

* empty commit (gh action merge checks are stuck)
2026-01-28 17:09:06 -08:00
Lisbet Alvarez 733c4c546c chore: 🤖 force solid-js to newest semver (#3141) 2026-01-27 13:51:17 -08:00
Lisbet Alvarez 99713ea0e1 chore: 🤖 resolve qs to 6.14 (#3139)
chore: 🤖 force qs to resolve to patch version 6.14.1
2026-01-26 14:51:16 -08:00
dependabot[bot] b493285ee1 chore(deps): bump lodash from 4.17.21 to 4.17.23 (#3134)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-26 13:43:58 -05:00
Zhihe Li 3e88411998 chore: 🤖 Remove the jira sync workflow (#3133) 2026-01-21 15:57:42 -05:00
55e1e68f30 [COMPLIANCE] Update Copyright and License Headers (#3099)
Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com>
Co-authored-by: Dharini <dharini@hashicorp.com>
2026-01-20 11:35:10 -05:00
dependabot[bot] 055da3d958 chore(deps): bump actions/checkout from 5.0.0 to 6.0.1 (#3121)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.0 to 6.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/08c6903cd8c0fde910a37f88322edcfb5dd907a8...8e8c483db84b4bee98b60c0593521ed34d9990e8)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 12:14:30 -05:00
dependabot[bot]andZhihe Li bd9b094834 chore(deps): bump actions/upload-artifact from 5.0.0 to 6.0.0 (#3119)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5.0.0 to 6.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/330a01c490aca151604b8cf639adc76d48f6c5d4...b7c566a772e6b6bfb58ed0dc250532a479d7789f)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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>
2026-01-13 11:46:34 -05:00
Lisbet Alvarez 773c1596e5 fix: 🐛 Update worker_filter label for AWS DHC w/ static creds (#3114)
* fix: 🐛 Update worker_filter label for AWS DHC w/ static creds

* test: 💍 add test case

* test: 💍 fix serializer tests
2026-01-08 14:45:16 -08:00
dependabot[bot] 1d0941865b chore(deps): bump actions/setup-node from 6.0.0 to 6.1.0 (#3120)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/2028fbc5c25fe9cf00d9f06a71cc4710d4507903...395ad3262231945c25e8478fd5baf05154b1d79f)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 6.1.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>
2026-01-06 16:23:47 -05:00
dependabot[bot] ecdf9c5b42 chore(deps): bump hashicorp/action-setup-enos from 1.38 to 1.40 (#3118)
Bumps [hashicorp/action-setup-enos](https://github.com/hashicorp/action-setup-enos) from 1.38 to 1.40.
- [Commits](https://github.com/hashicorp/action-setup-enos/compare/39a8f388434bea5eeba6649b99aa9949a55a1150...80a17fa25605989a7a53199137dae1244e32353f)

---
updated-dependencies:
- dependency-name: hashicorp/action-setup-enos
  dependency-version: '1.40'
  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>
2026-01-06 13:22:02 -05:00
dependabot[bot]andZhihe Li 89f94a9d07 chore(deps): bump stefanzweifel/git-auto-commit-action (#3117)
Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 7.0.0 to 7.1.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/28e16e81777b558cc906c8750092100bbb34c5e3...04702edda442b2e678b25b537cec683a1493fcb9)

---
updated-dependencies:
- dependency-name: stefanzweifel/git-auto-commit-action
  dependency-version: 7.1.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>
2026-01-06 12:32:15 -05:00
Lisbet Alvarez 0b7e3fcad1 refactor: 💡 remove ember-power-select duplicate dependency (#3075) 2026-01-05 15:01:29 -08:00
Tony 4170c7aa24 fix: 🐛 e2e - update save button selector (#3116) 2025-12-23 12:32:16 -05:00
venusangandZhihe Li c8737f0474 fix: 🐛 add aria-description to edit User detail btn to fix a11y bug (#3113)
A new param @ariaDescription that was added to addons/rose edit-toggle component 
which now allows us to define the value of aria-description per a11y requirements.
With this change, the User detail edit form button now includes a value for aria-description.

✅ Closes: FE-112

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-12-17 14:09:28 -08:00
hashicc 43249169d8 chore: 🤖 bump js-yaml (#3109) 2025-12-15 16:57:57 -08:00
hashiccandLisbet Alvarez ab2c235c52 Migrate asciicinema component from hashicorp/ember-asciinema-player repo (#3102)
* chore: 🤖 add asciinema-player dependency

* chore: 🤖 migrate component and test from addon repo

Migrated from repo:
https://github.com/hashicorp/ember-asciinema-player

At commit:
09db104dd1db96348351a1cf50315cd00c3189dd

* chore: 🤖 update component references in tests

* chore: 🤖 swap styles import to asciinema-player

Styles imported from ember-asciinema-player are only importing styles
from asciinema-player.

See:
https://github.com/hashicorp/ember-asciinema-player/blob/09db104dd1db96348351a1cf50315cd00c3189dd/app/styles/%40hashicorp/ember-asciinema-player.scss#L6

* chore: 🤖 Use specific version of ascii-cinema for our styles

See:
https://github.com/hashicorp/boundary-ui/pull/2828/commits/397cedc94e6e086e5b46bc01519b4befe1574e3d

* chore: 🤖 import setupRenderingTest from app helpers

* chore: 🤖 update reference to test .cast file fetched

* style: 💄 prettier formatting updates

* chore: 🤖 refactor to using element modifier

* chore: 🤖 remove unused/unreferenced property

* chore: 🤖 remove unused css classname

* chore: 🤖 rename asciinema player component class name

Rename class name to match the class naming conventions for generated
components

* refactor: 💡 simplify implementation

* refactor: 💡 replace addon component with app component

* fix: 🐛 pass in data as an object with the key data

* refactor: 💡 remove @tracked on player property

The player property doesn't need the @tracked because its not being used
by ember to render. It is not rendered itself and changes to the
property do not impact what ember renders. The player property only
needs to track the previous player reference during teardown

* chore: 🤖 remove hashicorp/ember-asciinema-player dependency

* fix: 🐛 update to correct location of asciinema-player.css

---------

Co-authored-by: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2025-12-15 16:14:18 -08:00
hashicc d45548e612 fix: 🐛 apply .sr-only fix to all instances (#3110)
Previously this was only applied to .sr-only instances within tables but
its needed for the other instances as well
2025-12-11 13:01:53 -05:00
hashicc f1ffb80b80 Revert "chore: 🤖 bump ember-can (#3093)" (#3107)
This reverts commit b5d33948dc.
2025-12-08 18:20:55 -05:00
hashicc 9204c63b17 Remove ember-cli-clipboard (#3098)
* chore: 🤖 replace CopyButton usage with Hds::Copy::Button

* chore: 🤖 remove ember-cli-clipboard

* test: 💍 fix test by stubbing writeText

The hds copy button uses the browser clipboard api. The writeText
api can fail if the window is not active. This does not happen in
practice because the window has to be active to be clicked by the
user. But in tests with synthetic triggers this can fail.

Stubbing the writeText method is also how hds tests their
component:
https://github.com/hashicorp/design-system/blob/990981b5741f9a6bf28d100c330b7865ba74e506/showcase/tests/integration/components/hds/copy/button/index-test.gts#L20
2025-12-08 12:00:32 -05:00
hashicc b5d33948dc chore: 🤖 bump ember-can (#3093)
* chore: 🤖 bump ember-can

* chore: 🤖 rename "can" service (deprecated) to abilities

See https://github.com/minutebase/ember-can/pull/152

* chore: 🤖 bump to ember-can@^8

* chore: 🤖 extend resolver for ember-can v7 breaking change

https://github.com/minutebase/ember-can/pull/186
2025-12-08 10:41:38 -05:00
hashicc 29fb5b00cb chore: 🤖 bump ember-modifier to common latest version (#3097) 2025-12-08 10:23:00 -05:00
hashicc f3a124cc47 chore: 🤖 convert rose form to embroider safe component helper (#3084)
Convert the component helper to use static strings which are embroider
safe:
https://github.com/embroider-build/embroider/blob/main/docs/replacing-component-helper.md
2025-12-05 16:52:30 -05:00
Priya Patel 2766be2c2e fix: 🐛 add missing router service injection for sessions page (#3106) 2025-12-05 15:23:37 -06:00
hashicc b9d064c949 chore: 🤖 migrate away from component helper for host set form (#3083)
* chore: 🤖 migrate away from component helper for host set form

* Add missing copyright headers
2025-12-05 14:24:28 -05:00
hashicc 0bac7d2711 chore: 🤖 migrate away from component helper for managed group (#3082)
* chore: 🤖 migrate away from component helper for managed group

* Add missing copyright headers
2025-12-05 14:11:22 -05:00
hashicc 1d08ddb513 chore: 🤖 migrate component helper usage for storage bucket form (#3081) 2025-12-03 17:37:05 -05:00
hashicc 824427b690 chore: 🤖 migrate away from component helper for target form (#3080)
* chore: 🤖 migrate away from component helper for target form

* Add missing copyright headers
2025-12-01 09:39:58 -05:00
hashicc 183bde311c chore: 🤖 use statically referenced credential form components (#3069)
* chore: 🤖 use statically referenced credential form components

* chore: 🤖 add entry for password credential form
2025-11-25 13:32:58 -05:00
hashicc 30c2cab0b7 chore: 🤖 use statically referenced components for host catalog (#3073) 2025-11-24 16:54:23 -05:00
hashicc 6fcc743217 chore: 🤖 use statically referenced components for host form (#3072)
* chore: 🤖 use statically referenced components for host form

* Add missing copyright headers
2025-11-24 16:37:11 -05:00
Dharini 719bab7358 chore: 🤖 Desktop client changelog and cli version update (#3087) 2025-11-21 13:29:01 -08:00
Zhihe Li 95f72e1248 chore: 🤖 Update playwright dependency (#3085)
* chore: 🤖 Update playwright dependency

* chore: 🤖 Update openapi generator
2025-11-20 12:22:16 -05:00
hashicc f9a9f677ca chore: 🤖 use statically defined credential store components (#3071)
* chore: 🤖 use statically defined cred store components

* Add missing copyright headers
2025-11-20 10:19:46 -05:00
Cameron Perera dd0c5df25c chore: 🤖 update tmp package to 0.2.5 (#3026)
* chore: 🤖 update tmp package to 0.2.5

* chore: 🤖 add tmp@0.2.5 override
2025-11-19 17:49:45 -06:00
Priya Patel 4fc3244049 refactor: 💡 update logic to get preferred rdp client (#3066)
* refactor: 💡 updated logic to store preferred rdp client

* refactor: 💡 simplified preferred client logic
2025-11-19 14:22:07 -08:00
Priya Patel 5faf830d46 refactor: 💡 updated magic strings with const (#3064) 2025-11-19 14:22:07 -08:00
Priya Patel d2cf82b85c e2e Rdp client tests (#3055)
* test: 💍 e2e test for rdp client launch

* test: 💍 added rdp test helper

* refactor: 💡 misc

* refactor: 💡 addressed comments

* refactor: 💡 removed similar test
2025-11-19 14:22:07 -08:00
Priya Patel fb0020c395 feat: 🎸 Add RDP client launch on session details page (#3037)
* feat: 🎸 preferred clients section on settings page

* refactor: 💡 moved rdp calls to app route

* test: 💍 fixed failings tests

* refactor: 💡 addressed comments

* fix: 🐛 fixed failing tests

* refactor: 💡 add mock rdp service calls to tests

* feat: 🎸 adds open button to session details page

* fix: 🐛 translation string

* refactor: 💡 address feedback

* refactor: 💡 address comment

* fix: 🐛 test failure
2025-11-19 14:22:07 -08:00
Priya Patel e55ea0b629 feat: 🎸 preferred clients section on settings page (#3034)
* feat: 🎸 preferred clients section on settings page

* chore: 🤖 update mock ipc with new handlers

* refactor: 💡 moved windows rdp protocol to const

* refactor: 💡 moved rdp calls to app route

* test: 💍 fixed failings tests

* refactor: 💡 addressed comments

* fix: 🐛 fixed failing tests

* refactor: 💡 add mock rdp service calls to tests

* refactor: 💡 addressed comments

* test: 💍 add additional tests

* refactor: 💡 fixed test failure
2025-11-19 14:22:06 -08:00
Dharini 9234dbae70 Icu 17881 UI desktop add rdp launch button in target detail view (#3038) 2025-11-19 14:22:06 -08:00
Dharini 27136eaa71 feat: Add launch functionality in targets list view (#3035) 2025-11-19 14:22:06 -08:00
Dharini 6554af1164 chore: 🤖 add ipc handlers for rdp (#3031) 2025-11-19 14:22:06 -08:00
Priya Patel 437d0e686d Create new RDP service (#3029)
* feat: 🎸 added a new RDP service

* fix: 🐛 rdp test

* refactor: 💡 update error handling for fetching rdp clients

* refactor: 💡 addressed comments

* fix: 🐛 revert private field

* refactor: 💡 addressed comments

* refactor: 💡 updated rdp clients to array of strings
2025-11-19 14:22:06 -08:00
Michael Li 25b801826d chore(e2e): Fix slack message (#3079) 2025-11-19 16:52:14 -05:00
Michael Li 123818dc70 chore(e2e): Update workflow triggers for e2e tests (#3077)
* chore(e2e): Update workflow triggers for e2e tests

* CR
2025-11-18 18:27:30 -05:00
Michael Li dafcd046d7 fix(e2e): Improve locator to avoid finding multiple elements (#3076) 2025-11-18 17:00:45 -05:00
Lisbet Alvarez accf9faf60 refactor: 💡 update credential-library form for password type (#3060)
* refactor: 💡 update credential-library form for password type

* style: 💄 fix display issue

* test: 💍 add test cases
2025-11-18 11:20:49 -08:00
Lisbet Alvarez 6bb237e78c Add password credential form (#3054)
* feat: 🎸 add password credential form

* test: 💍 add a11y ignores

* test: 💍 fix e2e tests

* test: 💍 add password cred type to targets brokering tests

* chore: 🤖 remove comment
2025-11-18 11:20:49 -08:00
Lisbet Alvarez bbb5808875 chore: 🤖 clean-up json-credentials feature flag (#3049) 2025-11-18 11:20:49 -08:00
Lisbet Alvarez 905a8f1951 Refactor cred type radio field (#3046)
* refactor: 💡 credential type radio field to be select field

* refactor: 💡 radio component to be select component

* test: 💍 fix e2e test page

* test: 💍 add correct selector to e2e test

* test: 💍 fix
2025-11-18 11:20:49 -08:00
Lisbet Alvarez f39961bbf5 Add password type to models and mirage (#3039)
* feat: 🎸 add new password type to cred models + mirage

* test: 💍 fix

* refactor: 💡 update target mirage trait

* chore: 🤖 add missing attr type
2025-11-18 11:20:49 -08:00
Michael Li 2bf09011fb fix(e2e): Fix LDAP test when org name contains the word "New" (#3074)
* fix(e2e): Wait for auth methods page to load

* fix(e2e): Make search for New button exact
2025-11-18 08:35:46 -05:00
Zhihe Li 013aa2e570 feat: 🎸 Refactored sessions page filters to load separately (#3053) 2025-11-17 17:06:47 -05:00
Michael Li 953e35bcd6 chore(e2e): Add slack message on e2e test failure (#3070)
* chore(e2e): Add slack message on test failure

* chore(e2e): Remove deprecated variable

* CR: only run in boundary-ui
2025-11-17 15:34:13 -05:00
hashicc e138b06fd3 chore: 🤖 remove leftover .yarn file (#3068) 2025-11-17 13:43:56 -05:00
hashicc 2ef6b0549d chore: 🤖 hoist esbuild to consolidate ember-source dependencies (#3052)
* chore: 🤖 hoist esbuild to fix dependency resolutions

* chore: 🤖 add back esbuild as an explicit dep for api addon

This addresses an eslint error but also is more explicit
with the api addon using esbuild directly
2025-11-13 13:32:08 -05:00
hashicc 1c49303432 chore: 🤖 update electron to avoid potential macos tahoe issue (#3024)
Electron has an issue being reported with latest macos tahoe:
https://github.com/electron/electron/issues/48311

This has been fixed in:
38.2.0
37.6.0
36.9.2

We are currently on 38.0.0 so this commit bumps electron to 38.2.0
2025-11-13 08:38:57 -05:00
hashicc f31b1e975d chore: 🤖 bump hds dependency (#3059) 2025-11-12 16:43:38 -05:00
Lisbet Alvarez 48d0087141 Unload expired sessions from store (#3033)
* fix: 🐛 unload expired sessions from ember data store

* fix: 🐛 add unloadAll & include terminated to admin ui

* test: 💍 update tests

* refactor: 💡 pr feedback for admin ui

* refactor: 💡 remove unneeded query from desktop ui

* refactor: 💡 check pushToStore var

* Revert "refactor: 💡 remove unneeded query from desktop ui"

* fix: 🐛 fix proxy details being removed after unload

* refactor: 💡 remove log
2025-11-11 11:16:12 -08:00
Zhihe Li 58cc9e56fc fix: 🐛 Fix filters sometimes not being displayed (#3050)
One of the changes that was made was not retrieving all resources for the dropdown filters. 
This had an unintended consequence when displaying the selected filters as it's possible for the selected filter to not be in the list of allFilters.

There's two main scenarios this happens (the prerequisite is having more filter options than we display which is 250):

* When filtering down the dropdown filters which means it might not be in the allFilters options. This was fixed by keeping track of all the searched options to be able to display.
* A user uses a query string or bookmarked a URL and goes to it directly. If the option isn't in the initial load, we won't have the actual option. In this case, I changed it to at least just display the ID instead of not showing up at all. Otherwise I'd have to load these selected options separately from the initial load which doesn't seem worth for this edge case.
2025-11-11 11:57:04 -05:00
Dylan HyunandZhihe Li 189a453e8b style: 💄 align typography and border styles to HDS tokens (#3051)
* Feat: Convert font-family styles to HDS tokens

* Feat: Convert font-size styles to HDS tokens

* Feat: Convert font-weight styles to HDS tokens

* Feat: Convert border-radius styles to HDS tokens

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-11-07 12:32:54 -05:00
Lisbet Alvarez 6fca90747c chore: 🤖 Add ignores for new violations (#3047) 2025-11-06 13:23:33 -08:00
Zhihe Li 92f5a65c00 feat: 🎸 Add ability to search other resources as well (#3021)
This commit adds the ability to search across multiple tables with joins which unlocks a better search experience in the case of tables that source their data from multiple tables.
2025-11-05 17:57:45 -05:00
Priya Patel d8744e81bc refactor: 💡 removed vault_ldap_feature flag (#3045) 2025-11-05 14:03:09 -06:00
dependabot[bot]andLisbet Alvarez 136baf8260 chore(deps): bump pnpm/action-setup from 4.1.0 to 4.2.0 (#3044)
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/a7487c7e89a18df4991f7f222e4898a00d66ddda...41ff72655975bd51cab0327fa583b6e92b6d3061)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: 4.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: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2025-11-04 13:35:58 -08:00
dependabot[bot]andLisbet Alvarez ef47c163d0 chore(deps): bump actions/upload-artifact from 4.6.2 to 5.0.0 (#3043)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.2 to 5.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/ea165f8d65b6e75b540449e92b4886f43607fa02...330a01c490aca151604b8cf639adc76d48f6c5d4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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-11-04 13:23:43 -08:00
dependabot[bot]andLisbet Alvarez 39e5e3406b chore(deps): bump stefanzweifel/git-auto-commit-action (#3042)
Bumps [stefanzweifel/git-auto-commit-action](https://github.com/stefanzweifel/git-auto-commit-action) from 6.0.1 to 7.0.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/778341af668090896ca464160c2def5d1d1a3eb0...28e16e81777b558cc906c8750092100bbb34c5e3)

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

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-11-04 13:06:57 -08:00
dependabot[bot]andLisbet Alvarez 91d8d61afb chore(deps): bump hashicorp/action-setup-enos from 1.37 to 1.38 (#3041)
Bumps [hashicorp/action-setup-enos](https://github.com/hashicorp/action-setup-enos) from 1.37 to 1.38.
- [Commits](https://github.com/hashicorp/action-setup-enos/compare/v1.37...39a8f388434bea5eeba6649b99aa9949a55a1150)

---
updated-dependencies:
- dependency-name: hashicorp/action-setup-enos
  dependency-version: '1.38'
  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: Lisbet Alvarez <107949262+lisbet-alvarez@users.noreply.github.com>
2025-11-04 12:41:38 -08:00
dependabot[bot]andLisbet Alvarez b1d9153efe chore(deps): bump actions/setup-node from 4.4.0 to 6.0.0 (#3040)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4.4.0 to 6.0.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4.4.0...2028fbc5c25fe9cf00d9f06a71cc4710d4507903)

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

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-11-04 12:14:10 -08:00
Zhihe Li fda1f56ad1 feat: 🎸 Add support for joins with filters (#3010)
This commit adds support for being able to join to other tables when filtering.
Support was also added for being able to find null values.
2025-11-03 17:28:11 -05:00
Zhihe Li fa18bfff01 feat: 🎸 Refactor session recording filters (#2981)
This commit has a few notable changes:

1. A simple attempt at establishing a pattern for using SELECT statements. This will be useful in the future for joins/subquery support.
2. Expanded usage of searching to be able to pass instead of just a string, an object that lets a consumer choose which columns to search on.
3. Decouple our session recording filters from being loaded from the route model hook which is a departure from our convention. This has the benefit of actually letting the page first load and having the filters load async so the page doesn't wait for the filters to finish. This is also much faster to query for each individual filter option from SQLite rather than returning all data to filter in application code.
2025-10-31 16:58:05 -04:00
Lisbet Alvarez 72f7c8a92d fix: 🐛 OIDC authentications not properly showing username (#2930)
* fix: 🐛 properly show username for oidc auth method in user menu

* test: 💍 fix admin ui tests

* test: 💍 fix desktop ui tests

* refactor: 💡 admin to not store username in authenticated object

* refactor: 💡 use getter in app controller

* test: 💍 POC for how we could update our tests to use auth account

* refactor: 💡 remove unused service

* test: 💍 fix all tests in ui/admin

* test: 💍 revert one change

* refactor: 💡 update ui/desktop w/ feedback + fix tests

* refactor: 💡 add in error handling

* refactor: 💡 cleanup unused service

* test: 💍 fix e2e test selector

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17231
2025-10-30 12:49:30 -07:00
Zhihe Li 838bc37243 fix: 🐛 Fix sanitizing of tokens when logging (#3036) 2025-10-29 17:05:22 -04:00
hashicc 866972c6c6 chore: 🤖 create patched ember-loading for modern e-c (#3015) 2025-10-28 10:04:32 -04:00
dillanb-hashi b19d76f249 chore: 🤖 Added github action to run e2e ui tests (#3025)
* chore: 🤖 Added github action to run e2e ui tests
2025-10-21 09:18:05 -07:00
Zhihe Li 35ccaeba56 style: 💄 Update if curly brace statements (#3023) 2025-10-13 10:53:21 -04:00
hashicc bf134072e5 refactor: 💡 migrate away from component helper for auth-method (#3011)
* refactor: 💡 migrate away from component helper for auth-method
component

* Add missing copyright headers
2025-10-08 12:53:19 -04:00
hashicc 0bd152e0b5 Migrate away from component helper in credential library form component (#3013)
* refactor: 💡 migrate away from component helper for cred library form

* Add missing copyright headers
2025-10-07 13:40:30 -04:00
dependabot[bot] 928ca5409c chore(deps): bump hashicorp/action-setup-enos from 1.37 to 1.38 (#3016)
Bumps [hashicorp/action-setup-enos](https://github.com/hashicorp/action-setup-enos) from 1.37 to 1.38.
- [Commits](https://github.com/hashicorp/action-setup-enos/compare/b9fa53484a1e8fdcc7b02a118bcf01d65b9414c9...39a8f388434bea5eeba6649b99aa9949a55a1150)

---
updated-dependencies:
- dependency-name: hashicorp/action-setup-enos
  dependency-version: '1.38'
  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-10-07 10:16:55 -04:00
dependabot[bot] 0f846eab2c chore(deps): bump actions/setup-node from 4.4.0 to 5.0.0 (#3017)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4.4.0 to 5.0.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/49933ea5288caeca8642d1e84afbd3f7d6820020...a0853c24544627f65ddf259abe73b1d18a591444)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-06 21:25:12 -04:00
dependabot[bot]andLisbet Alvarez 14ed74dd3d chore(deps): bump actions/labeler from 5.0.0 to 6.0.1 (#3018)
Bumps [actions/labeler](https://github.com/actions/labeler) from 5.0.0 to 6.0.1.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/8558fd74291d67161a8a78ce36a881fa63b766a9...634933edcd8ababfe52f92936142cc22ac488b1b)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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-10-06 13:34:51 -07:00
Lisbet Alvarez 701d19bd18 chore: 🤖 resolve on-headers dependabot alert (#3020) 2025-10-06 13:17:50 -07:00
hashicc 240a544d82 refactor: 💡 remove dynamic component helper from form/authenticate (#3012)
* refactor: 💡 remove dynamic component helper from form/authenticate

* Add missing copyright headers
2025-10-06 15:09:42 -04:00
Priya Patel b4f3741979 fix: 🐛 Update vault-ldap cred library (#3000)
* fix: 🐛 remove UPD cred type from vault-ldap

* fix: 🐛 failing tests

* fix: 🐛 remove log
2025-10-02 12:08:25 -05:00
dependabot[bot]andZhihe Li 396bf0a43f chore(deps): bump browser-actions/setup-chrome from 1.7.3 to 2.1.0 (#2982)
Bumps [browser-actions/setup-chrome](https://github.com/browser-actions/setup-chrome) from 1.7.3 to 2.1.0.
- [Release notes](https://github.com/browser-actions/setup-chrome/releases)
- [Changelog](https://github.com/browser-actions/setup-chrome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/browser-actions/setup-chrome/compare/v1.7.3...b94431e051d1c52dcbe9a7092a4f10f827795416)

---
updated-dependencies:
- dependency-name: browser-actions/setup-chrome
  dependency-version: 2.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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-10-01 11:01:50 -04:00
dependabot[bot] 3225ccda10 chore(deps): bump actions/checkout from 4.2.2 to 5.0.0 (#2983)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/11bd71901bbe5b1630ceea73d27597364c9af683...08c6903cd8c0fde910a37f88322edcfb5dd907a8)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-01 10:49:55 -04:00
Michael Li ad2c1ba2ad chore(e2e): Update desktop e2e test workflow to use new environment variable (#3014)
* chore(e2e): Update to use boundary license env

* chore(e2e): Allow runs if workflow_dispatch
2025-10-01 09:06:36 -04:00
dillanb-hashi ea591df0bb test: 💍 Refactor target functions and fix failing test (#2999)
* test: 💍 Fixed broken test 

* test: 💍 Refactoring to consolidate target function names

* test: 💍 fixed failing tests with capitalization issue
2025-09-30 09:35:26 -07:00
Zhihe Li 72639bd6a3 fix: 🐛 Pass in session time out when creating session (#3008)
* fix: 🐛 Pass in session time out when creating session

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17701
2025-09-22 16:31:44 -04:00
Zhihe Li 31f0044c0f fix: 🐛 Fix schema for sqlite inserts (#3006)
* fix: 🐛 Fix schema for sqlite inserts

* fix: 🐛 Also fix delete trigger not working with REPLACE INTO
2025-09-18 10:16:01 -04:00
Lisbet Alvarez d0924f7e6d fix: 🐛 max depth error for active sessions filter in targets (#3004)
* fix: 🐛 max depth error for active sessions filter in targets

* refactor: 💡 revert route and convert operators in parser

* refactor: 💡 add expr limit

* refactor: 💡 add parameters to IN/NOT IN conditions

* test: 💍 fix tests

* docs: ✏️ add comment
2025-09-17 15:32:39 -07:00
Zhihe Li d2616acf36 fix: 🐛 Pass the addr to CLI when canceling sessions (#3007) 2025-09-17 18:15:39 -04:00
Zhihe Li dfd116bd56 chore: 🤖 Update dependency for security alert (#3005) 2025-09-17 16:59:35 -04:00
Michael Li 830acef847 test(e2e): Make role creation sequential (#3003)
When running this test against an AWS cluster, this operation was resulting in 504s. This was potentially hitting some AWS rate limits when making these requests concurrently.
2025-09-16 17:50:11 -04:00
Zhihe Li ee7c916494 fix: 🐛 Fix sessions not properly getting cleaned up (#3002)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17645
2025-09-15 18:11:43 -04:00
hashicc 46d477ea5b Refresh target active sessions for admin and desktop (#3001)
* fix: 🐛 refresh sessions for targets list on admin and desktop

Refresh the sessions for the targets list pages on admin and desktop so
that the active sessions column is up to date

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

* test: 💍 add test for targets list refreshing sessions on admin

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

* refactor: 💡 allow ipcStub to return current mirage data

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

* test: 💍 ensure that desktop targets sessions are refreshed

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

* test: 💍 update existing tests affected by sessions refresh ipc

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

* refactor: 💡 remove force_refresh from sessions sync

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17646
2025-09-15 12:53:17 -04:00
hashicc 177b4af695 refactor: 💡 rdp default client port and max connections labels (#2998) 2025-09-12 14:41:46 -07:00
Zhihe Li d2b8805605 fix: 🐛 Fix usage of top level await in worker which fails build (#2997) 2025-09-10 16:44:24 -04:00
Zhihe Li 39dedc68ec fix: 🐛 Add better check for determining if we can use OPFS (#2996) 2025-09-10 11:35:02 -04:00
hashicc bd67756cda fix: 🐛 fix bug with the apiClientTestAfter noop fixture hanging and update e2e label username, password locators with required text (#2994)
* fix: 🐛 fix bug with the e2e test fixture hanging

* test: 💍 update cred store label locators with exact match

* test: 💍 update createTargetWithAddressAndAlias with target type
2025-09-10 10:14:55 -04:00
Dharini dd37fa4270 fix: 🐛 var name (#2970) 2025-09-09 15:27:35 -07:00
hashicc 3c5c048152 docs: ✏️ update alias value helper text (#2995) 2025-09-09 16:49:11 -04:00
hashicc dd6e4ef2d0 chore: 🤖 update desktop client changelog & bundled cli version (#2992)
* chore: 🤖 update cli version bundled with desktop client

* docs: ✏️ update changelog
2025-09-08 11:47:27 -04:00
Zhihe Li bce79f3488 fix: 🐛 Add a better db check (#2993) 2025-09-08 10:42:39 -04:00
Zhihe Li 74793a2399 chore: 🤖 Update form-data dependency (#2991) 2025-09-05 14:00:03 -04:00
Zhihe Li 6b120b053a chore: 🤖 Update electron dependency (#2989) 2025-09-04 16:49:50 -04:00
Dharini 1d0d62337e fix: 🐛 a11y test failures (#2988) 2025-09-04 10:30:44 -07:00
Dharini df8bfc42bb chore: 🤖 vault ldap feature flag 2025-09-03 17:02:25 -07:00
Dharini ff087738fc fix: 🐛 parser for handling username with domain 2025-09-03 17:02:05 -07:00
Dharini 27567c88c9 fix: 🐛 a11y tests 2025-09-03 17:01:43 -07:00
Priya Patel 9077a747d6 refactor: 💡 change default target type to tcp 2025-09-03 17:01:27 -07:00
Dharini b359d9f525 fix: 🐛 remove optional tags 2025-09-03 17:01:04 -07:00
Dharini ad7bd2e52d fix: 🐛 add required tags 2025-09-03 17:00:43 -07:00
Priya Patel 36aed9588b refactor: 💡 remove dropdown for rdp type 2025-09-03 17:00:22 -07:00
Dharini f8c81a29c4 chore: 🤖 vault-ldap target injection 2025-09-03 16:59:48 -07:00
Priya Patel c91771e152 feat: 🎸 vault ldap CRUDL support 2025-09-03 16:59:20 -07:00
Priya Patel 3b7873302b feat: 🎸 vault ldap cred 2025-09-03 16:08:00 -07:00
Dharini d79bd54f0b fix: 🐛 remove redudant cert warning 2025-09-03 16:06:40 -07:00
Priya Patel 51dc9a0e49 chore: 🤖 update brokered cred tests 2025-09-03 16:06:07 -07:00
Dharini b49e55d400 test: 💍 refactor e2e 2025-09-03 16:05:42 -07:00
Priya Patel 33cb7e0a50 test: 💍 acceptance tests for rdp target brokered creds 2025-09-03 16:05:21 -07:00
Dharini 9edc90306e test: 💍 e2e tests 2025-09-03 16:04:50 -07:00
Dharini 0a75e05b28 feat: 🎸 display toast notifications for rdp sessions 2025-09-03 16:04:17 -07:00
Priya Patel 4a179ac3e3 chore: 🤖 rdp desktop changes 2025-09-03 16:03:48 -07:00
Dharini 42e32f9568 chore: 🤖 filter rdp credentials 2025-09-03 16:02:59 -07:00
Priya Patel 0223755b2a feat: 🎸 rdp target form- read, list and delete 2025-09-03 16:02:00 -07:00
Priya Patel 30a5f2a701 feat: 🎸 rdp form - create and update 2025-09-03 16:01:25 -07:00
Dharini Jeeva d2d351c9f7 chore: 🤖 add rdp target type 2025-09-03 16:00:12 -07:00
Dharini Jeeva e1696e9a4d feat: 🎸 add support for upd credential 2025-09-03 15:59:29 -07:00
Zhihe Li 25f015b179 chore: 🤖 Remove timer console statements (#2985) 2025-09-03 11:41:43 -04:00
Zhihe Li 9e263379a7 refactor: 💡 Remove usage of indexed DB (#2979)
* refactor: 💡 Remove usage of indexed DB
2025-09-03 11:41:43 -04:00
Lisbet Alvarez 4c7ea161cd feat: 🎸 Add sqlite support to sessions (#2978)
* feat: 🎸 Add sqlite support to sessions

* refactor: 💡 only peek sqlite db when batching queries

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17411
2025-09-03 11:41:42 -04:00
Zhihe Li dc026c44a1 feat: 🎸 Handle corrupted sqlite DB (#2976)
* feat: 🎸 Handle corrupted sqlite DB
2025-09-03 11:41:42 -04:00
Zhihe Li cb8b21c10c feat: 🎸 Add sqlite support for session recordings (#2974)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17419
2025-09-03 11:41:42 -04:00
Lisbet Alvarez 47c1beadcd feat: 🎸 Add sqlite support to host-catalogs (#2973)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17417
2025-09-03 11:41:42 -04:00
Lisbet Alvarez 8f7eb2abea feat: 🎸 add fts tables to groups (#2971)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17413
2025-09-03 11:41:42 -04:00
Zhihe Li c2b0f321de feat: 🎸 Add sqlite support for auth methods (#2969)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17418
2025-09-03 11:41:42 -04:00
Lisbet Alvarez ba7b8b8824 feat: 🎸 add sqlite support for scopes (#2968)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17415
2025-09-03 11:41:42 -04:00
Zhihe Li 9e612cf83d feat: 🎸 Add sqlite support for credential stores (#2967)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17416
2025-09-03 11:41:42 -04:00
Lisbet Alvarez 2154251c30 feat: 🎸 Add sqlite support for users (#2966)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17412
2025-09-03 11:41:42 -04:00
Zhihe Li 2d38266609 feat: 🎸 Add sqlite support for roles (#2965)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17414
2025-09-03 11:41:41 -04:00
Lisbet AlvarezandZhihe Li d414df4ca4 feat: 🎸 Add custom sort support to sql parser (#2959)
* feat: 🎸 Add custom sort support to sql parser

* test: 💍 fix column numner

* refactor: 💡 apply pr feedback

* fix: 🐛 use every method for checking attrs

* refactor: 💡 PR feedback + ensure default sort

* refactor: 💡 Consolidate attributes field when sorting

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

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-09-03 11:41:41 -04:00
Zhihe Li eab93cf6c5 Icu 17516 use in memory sqlite in non secure contexts (#2958)
* feat: 🎸 Add checks to see if sqlite is in secure environment

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17516
2025-09-03 11:41:41 -04:00
Zhihe Li 3304def44a feat: 🎸 Add sqlite support for aliases (#2957)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17420
2025-09-03 11:41:41 -04:00
Zhihe Li a4bf02b21b refactor: 💡 Change variable name for peeking db (#2954) 2025-09-03 11:41:41 -04:00
Zhihe Li e0982da744 feat: 🎸 Add sqlite handler and parser (#2933)
* feat: 🎸 Add sqlite handler and parser

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17410
2025-09-03 11:41:41 -04:00
Zhihe Li 8abed1a809 feat: 🎸 Add a shared service between web workers (#2932)
* feat: 🎸 Add a shared service between web workers

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17409
2025-09-03 11:41:40 -04:00
Zhihe Li a9a6518b23 feat: 🎸 Allow building and bundling of web workers in ember (#2923)
* feat: 🎸 Allow building and bundling of web workers in ember

* refactor: 💡 Cleanup code and add comments
2025-09-03 11:41:40 -04:00
Michael Li 1bafbe1ad2 test(e2e): Address some Admin UI test flakiness (#2934)
* fix(e2e): Address flakiness during screen navigation

* fix(e2e): Fix function call

* fix(e2e): Address flakiness in connection

* fix(e2e): Make locator explicit to avoid conflict when an ID has `ok`

* fix(e2e): Fix URL now that project page defaults to showing targets
2025-09-03 11:28:33 -04:00
Lisbet Alvarez a26074a3b8 fix: 🐛 host header renders multiple times (#2980)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17584
2025-09-02 16:28:53 -07:00
Zhihe Li 90fd2f1447 fix: 🐛 Fix bug that prevents setting cluster URL (#2975)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17579
2025-08-28 12:27:12 -04:00
Priya Patel e59690e703 chore: 🤖 update ember-feature-flags and tracked-built-ins (#2903)
* chore: 🤖 update ember-feature-flags and tracked-built-ins

* chore: 🤖 update glimmer/component@2.0.0 for ember-feature-flag

* chore: 🤖 test ember-feature-flag update

* chore: 🤖 test ember-feature-flag@6.0.0

* refactor: 💡 undo test commit changes
2025-08-20 13:37:58 -05:00
cameronperera bf06e9f654 test: 💍 update known a11y violations 2025-08-19 10:51:44 -05:00
cameronperera 84359d8e79 docs: ✏️ fix flag name and a11y references 2025-08-19 10:51:44 -05:00
cameronperera 7801429530 refactor: 💡 remove body reference from typography style 2025-08-19 10:51:44 -05:00
hashicc dc9376a460 (HACK WEEK 2025) a11y-audit-ignore codemod (#2946)
* chore: 🤖 add ember-a11y-ignore tool

* chore: 🤖 fix handling existing setRunOptions imports

* chore: 🤖 move codemod to support folder

* chore: 🤖 fix edge case for handling property key names

* chore: 🤖 handle case where multiple of same violation in test

This fixes a bug where multiple cases of the same violation would end up
with multiple entries

* chore: 🤖 ignore axe rules that are currently failing in admin

* chore: 🤖 ignore axe rules that are currently failing in desktop

* docs: ✏️ add a comment explaining the codemod

* chore: 🤖 include test.each cases for a11y ignores

* fix: 🐛 handle test.each test cases for a11y ignore codemod
2025-08-19 10:51:44 -05:00
hashicc 1f4076d8d4 (HACK WEEK 2025) Upload a11y reports in ci (#2949)
* ci: 🎡 consolidate ember a11y reports and upload as gh artifact

* ci: 🎡 Bump test timeout for a11y tests

* chore: 🤖 run a11y tests in parallel

* chore: 🤖 only run a11y audit against acceptance tests

* chore: 🤖 restore ember test in place of ember exam

testing whether or not ember test hangs with three tests timing out like
ember exam does

* ci: 🎡 output a11y reports filtered down in ci

* ci: 🎡 attempt to fix shell exit code for a11y test failures

* ci: 🎡 add step names for outputting a11y test report summary
2025-08-19 10:51:44 -05:00
Cameron Perera f202d0f533 (HACK WEEK 2025) docs: ✏️ add a11y testing info to READMEs (#2945)
* docs: ✏️ add a11y testing info to READMEs

* chore: 🤖 remove light theme setup for acceptance tests in admin

* docs: ✏️ add link to test-helper.js in README

* chore: 🤖 update PR template for a11y-tests

* test: 💍 fix color theme switching tests
2025-08-19 10:51:44 -05:00
hashicc 4344dcbb36 Fix a11y-tests label (#2947) 2025-08-19 10:51:44 -05:00
Cameron Perera 87d6bbae2a (HACK WEEK 2025) chore: 🤖 add new gh workflow for a11y tests (#2942)
* chore: 🤖 add new gh workflow for a11y tests

* chore: 🤖 remove a11y dark tests job

* chore: 🤖 increase a11y tests timeout
2025-08-19 10:51:44 -05:00
Cameron Perera 7a42bf456e (HACK WEEK 2025) Dark mode a11y audit rules (#2939)
* chore: 🤖 change axe runOptions based on color theme

* fix: 🐛 fix background-color and color styles application
2025-08-19 10:51:44 -05:00
hashicc a51f1eee8e (HACK WEEK 2025) a11y desktop test helper (#2938)
* chore: 🤖 run ember-a11y-testing conditionally in desktop

* chore: 🤖 control launched testem chrome theme via COLOR_THEME

* chore: 🤖 add package.json scripts for desktop a11y tests

* chore: 🤖 gitignore a11y report

* chore: 🤖 update desktop package.json test command

Explicitly call test and finalize separately, previously "concurrently"
would pick up the finalize task

* chore: 🤖 remove unneeded console.logs
2025-08-19 10:51:44 -05:00
Carlos Alcaide CorvoandLisbet Alvarez 5b72a916e4 (HACK WEEK 2025) A11y admin test helper (#2937)
* chore: 🤖 add a11y audit test helper config

* chore: 🤖 remove report files

* refactor: 💡 remove console.log

* Apply PR feedback

* Delete the flag --server when running a11y tests

---------

Co-authored-by: Lisbet Alvarez <lisbet.alvarez@hashicorp.com>
2025-08-19 10:51:44 -05:00
Cameron Pereraandcalcaide 42013a919f (HACK WEEK 2025) refactor: 💡 remove explicit a11yAudit usage (#2936)
* refactor: 💡 remove explicit usage of a11yAudit

* Delete a11yAudit method from readme

---------

Co-authored-by: calcaide <ccorvo@hashicorp.com>
2025-08-19 10:51:44 -05:00
Cameron Perera 3918f82e14 chore: 🤖 add DARK_MODE env variable to testem config (#2935)
for admin and desktop
2025-08-19 10:51:44 -05:00
Carlos Alcaide Corvo 6e79a2a133 Delete development environment variables for the appUpdater (#2961) 2025-08-15 14:12:08 -07:00
dependabot[bot]andZhihe Li 088deaed3a chore(deps): bump tmp from 0.2.3 to 0.2.5 in /ui/desktop/electron-app (#2962)
Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.3 to 0.2.5.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.5)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.5
  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>
2025-08-14 14:50:15 -04:00
Zhihe Li 7504e7710c ci: 🎡 Use repo variables to determine which runner to use (#2963) 2025-08-14 14:28:58 -04:00
hashicc bb7352ca54 fix: 🐛 fix the dependency on apiClientTestAfter with a noop (#2964) 2025-08-14 10:40:52 -04:00
hashiccandZhihe Li b42ecbff36 Add api client for playwright e2e tests (#2901)
* chore: 🤖 add @openapitools/openapi-generator-cli

* chore: 🤖 Add @nestjs/core and @openapitools/openapi-generator-cli to ignoredBuiltDependencies

These packages use postinstall for a opencollective notice

* chore: 🤖 add package.json scripts for open-api client gen

* chore: 🤖 add openapi generated files

* chore: 🤖 add boundary api client fixture

* chore: 🤖 incorporate api client fixture with base fixture

* chore: 🤖 migrate existing test to use boundary api fixture

* refactor: 💡 remove org cleanup from test

* refactor: 💡 update sorting e2e test to use api client

* refactor: 💡 clean up api client resource clean up logging

* docs: ✏️ update jsdoc links for domain clients

* chore: 🤖 avoid adding copywright headers to generated api

* Add missing copyright headers

* chore: 🤖 remove fetch argument from api client class

The hope was to use request.fetch but playwright's fetch is a
non-standard fetch which causes the generated api client to fail when
using .clone() on the response

* chore: 🤖 add optional OPENAPI_SWAGGER_URL_OR_FILE for openapi-client
generation

The OPENAPI_SWAGGER_URL_OR_FILE env var can be used to specify the
-i flag the generate:api-client script with either:
* a relative path
* an absolute path
* a url like: https://raw.githubusercontent.com/hashicorp/boundary/refs/heads/main/internal/gen/controller.swagger.json

* refactor: 💡 clean up and refactor boundary-api-client fixture

* chore: 🤖 add extra doc links and delete methods

* test: 💍 add test to ensure that api-client fixture works

* test: 💍 update existing e2e test examples with api-client

* docs: ✏️ add comment for api-client e2e test

* docs: ✏️ add additional links to service docs for api clients

* refactor: 💡 cleanup api-client and corresponding test

* docs: ✏️ add api client fixture docs to e2e README

* fix: 🐛 fix regex

* remove unnecessary capture group
* add "-" to regex to allow for url segments like "storage-buckets" in
  "/v1/storage-buckets"

* docs: ✏️ comment potential edge case in e2e api client cleanup

* docs: ✏️ fix comment typo

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

* docs: ✏️ remove auth flag for generating e2e client

* docs: ✏️ add mention that java is required for generate:api

* chore: 🤖 implement pr feedback

* chore: 🤖 Clean up api client and add more extensive test

* chore: 🤖 fix casing in api-client test

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-08-12 18:08:35 -04:00
Carlos Alcaide Corvo 5fd9f0216a Fix security vulnerability within desktop appUpdater (#2953)
* use app.isPackaged instead of electron-is-dev
2025-08-12 11:19:43 -07:00
dependabot[bot]andCarlos Alcaide Corvo 942ea99459 chore(deps): bump browser-actions/setup-chrome from 1.7.3 to 2.1.0 (#2952)
Bumps [browser-actions/setup-chrome](https://github.com/browser-actions/setup-chrome) from 1.7.3 to 2.1.0.
- [Release notes](https://github.com/browser-actions/setup-chrome/releases)
- [Changelog](https://github.com/browser-actions/setup-chrome/blob/master/CHANGELOG.md)
- [Commits](https://github.com/browser-actions/setup-chrome/compare/c785b87e244131f27c9f19c1a33e2ead956ab7ce...b94431e051d1c52dcbe9a7092a4f10f827795416)

---
updated-dependencies:
- dependency-name: browser-actions/setup-chrome
  dependency-version: 2.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Carlos Alcaide Corvo <ccorvo@hashicorp.com>
2025-08-08 09:28:25 -07:00
LaurenandZhihe Li 990e2d6b9d [Desktop][Bug fix]: Stop target sessions before unauthenticating user session (#2891)
* add stopAll invocation to ipc handler

* trigger modal on both signout btns

* refactor invalidateSession fn

* fix application controller tests

* fix failing tests settings-card/user

* add test to Acceptance | authentication

* migrate electron dialog.showMessageBoxSync to Hds

* rename channel and tracked prop, consolidate cancel fns

* combine modals, add willDestroy, refactor

* test signout and close sessions modal

* address feedback

* refactor window.electron in authentication-test

* address feedback

* refactor: 💡 Fix failing tests

---------

Co-authored-by: Zhihe Li <zhihe.li@hashicorp.com>
2025-08-04 16:44:27 -04:00
Zhihe Li f776ba0617 Fix auto commit of copyright headers (#2948)
* fix: 🐛 Fix copyright header updates failing in CI
2025-07-28 13:50:35 -04:00
hashicc fb57965457 chore: 🤖 update @glimmer/component to v2 (#2871)
* chore: 🤖 update @glimmer/component to v2

* chore: 🤖 bump ember-a11y-refocus to fix focus errors in tests

Previous runs had three failing tests related to focusing from
ember-a11y-refocus:
* global failure: TypeError: Cannot read properties of null (reading 'focus')

Tests failing with this error were fixed as part of this PR:
https://github.com/ember-a11y/ember-a11y-refocus/pull/347

After bumping to a later version of ember-a11y-refocus, the
existing failing tests now pass
2025-07-18 13:12:34 -04:00
Tony b99fce7d55 refactor: 💡 e2e admin tests - update locators (#2931)
* refactor: 💡 e2e tests - update locators

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

* refactor: 💡 addressing comments

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

* refactor: 💡 update test for session-recording-aws-ent

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17174
2025-07-17 15:48:20 -04:00
Zhihe Li 0a2d743ea2 fix: 🐛 Fix removing worker tag (#2928) 2025-07-16 13:27:13 -04:00
Lisbet Alvarez fbd613084d fix: 🐛 prevent worker registration icon from shrinking (#2929)
* fix: 🐛 prevent worker registration icon from shrinking

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17392
2025-07-15 17:13:07 -07:00
Cameron Perera 4cd56f8ae5 Icu 17393 manage resource button permissions bug (#2927)
* fix: 🐛 hide manage button if no action items

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

* fix: 🐛 update manage actions for credential-stores

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

* fix: 🐛 update manage actions for groups

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

* fix: 🐛 update manage actions for host-sets

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

* fix: 🐛 update manage actions for roles

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

* fix: 🐛 update manage action for targets

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

* fix: 🐛 update manage actions for workers

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

* fix: 🐛 update manage actions for users

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

* fix: 🐛 update manage actions for auth-methods

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17393
2025-07-15 14:03:27 -05:00
Carlos Alcaide Corvo c0d41c0a62 Delete on-click-inside and on-click-outside rose modifiers (#2926) 2025-07-15 09:11:32 -07:00
Carlos Alcaide Corvo 389c635030 Modify string sorting to benefit upperCase (#2924)
* Modify the string sorting to benefit uppercase over lowercase at comparison
2025-07-11 10:08:39 -07:00
Lisbet Alvarez d93a0c170c test: 💍 refactor targets manage alias test selectors (#2921)
✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16437
2025-07-10 16:20:37 -07:00
Lisbet Alvarez aa18f599ce test: 💍 refactor target worker test selectors (#2910)
* test: 💍 refactor target worker test selectors

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

* test: 💍 update selector

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-16438
2025-07-10 15:34:24 -07:00
Tony aa7eb2e844 test: 💍 Add admin UI test for change passsword flow (#2920)
* test: 💍 Add admin UI test for change passsword flow

This PR adds a test to the Admin UI e2e test suite to validate the
workflow of changing user password from settings menu

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

* refactor: 💡 create resources via REST API

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

* refactor: 💡 consistent code structure, comments

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

* refactor: 💡 code structure consistency

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

* refactor: 💡 removed version parameter from boundary-http funcs

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

* refactor: 💡 rm unneeded params from https makeAuthMethodPrimary

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

* refactor: 💡 rm ui login step

✅ Closes: https://hashicorp.atlassian.net/browse/ICU-17173
2025-07-10 11:26:52 -04:00
2616 changed files with 78266 additions and 23418 deletions

No files matched your search

+4 -4
View File
@@ -2,20 +2,20 @@ schema_version = 1
project {
license = "BUSL-1.1"
copyright_year = 2024
copyright_year = 2021
# (OPTIONAL) A list of globs that should not have copyright/license headers.
# Supports doublestar glob patterns for more flexibility in defining which
# files or folders should be ignored
header_ignore = [
".github/**",
".husky/**",
"**/node_modules/**",
"**/dist/**",
"**/coverage/**",
"ui/desktop/electron-app/out/**",
"ui/desktop/electron-app/ember-dist/**",
"**/pnpm-lock.yaml",
"**/pnpm-workspace.yaml",
"ui/desktop/electron-app/out/**",
"ui/desktop/electron-app/ember-dist/**",
"e2e-tests/api-client/**"
]
}
+91
View File
@@ -0,0 +1,91 @@
name: ci
on:
push:
branches: [main]
tags-ignore: ["**"]
workflow_dispatch:
schedule:
- cron: "41 5 * * *" # nightly: dependency audit + full test run
# One job on purpose: the shared runner pool is small, so everything runs
# sequentially on a single runner instead of a matrix.
jobs:
check:
runs-on: ubuntu-latest
timeout-minutes: 90
env:
CI: "true"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "22"
- name: install pnpm
run: |
npm install -g pnpm@10.33.3
pnpm --version
- name: install dependencies
# Lifecycle scripts are skipped: the desktop postinstall compiles
# electron-app native modules, which the admin build and ember tests
# do not need.
run: pnpm install --frozen-lockfile --ignore-scripts
- name: install headless chrome
# Debian/Ubuntu chromium from the distro archive (fast, mirrored),
# exposed under the name testem's "Chrome" launcher looks for.
shell: bash
run: |
set -euo pipefail
if ! command -v google-chrome >/dev/null 2>&1; then
SUDO=""; [ "$(id -u)" -ne 0 ] && SUDO="sudo"
export DEBIAN_FRONTEND=noninteractive
$SUDO apt-get update -qq
$SUDO apt-get install -y -qq --no-install-recommends chromium \
|| $SUDO apt-get install -y -qq --no-install-recommends chromium-browser
CHROME_BIN=$(command -v chromium || command -v chromium-browser)
mkdir -p "$HOME/bin"
ln -sf "$CHROME_BIN" "$HOME/bin/google-chrome"
echo "$HOME/bin" >> "$GITHUB_PATH"
fi
PATH="$HOME/bin:$PATH" google-chrome --version
- name: build admin ui
run: pnpm --filter admin build
- name: test addons
run: |
for a in core auth rose; do
echo "::group::addons/$a"
(cd addons/$a && npx ember test --test-port 0)
echo "::endgroup::"
done
echo "::group::addons/api"
(cd addons/api && npx ember exam --test-port 0 --split=4 --parallel=1)
echo "::endgroup::"
- name: test desktop ui
run: cd ui/desktop && npx ember test --test-port 0
- name: test admin ui
# The test build is made once and the partitions then run against the
# static output, one browser at a time. Rebuilding in-process (and four
# concurrent browsers) stalled on the small shared runners.
run: |
cd ui/admin
npx ember build --environment=test --output-path="$RUNNER_TEMP/admin-test-dist"
for p in 1 2 3 4; do
echo "::group::admin partition $p/4"
timeout 25m npx ember exam --test-port 0 --path "$RUNNER_TEMP/admin-test-dist" --split=4 --partition=$p
echo "::endgroup::"
done
- name: dependency audit
# Fails on critical advisories only; remaining high/moderate advisories
# are build/test tooling and are tracked in pnpm-overrides.md.
run: |
pnpm audit --audit-level=critical
(cd ui/desktop/electron-app && pnpm audit --audit-level=critical)
-2
View File
@@ -1,2 +0,0 @@
# Anyone attached to this rule will always been assigned to a pull request
* @hashicorp/boundary-ui
-67
View File
@@ -1,67 +0,0 @@
---
name: Bug report
about: Let us know about a bug!
title: ''
labels: ''
assignees: ''
---
<!-- Please reserve GitHub issues for bug reports and feature requests.
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 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.
-->
## :bug: Bug Report
### **Description**
_A clear and concise description of the bug._
### **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._
-7
View File
@@ -1,7 +0,0 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
contact_links:
- name: Ask a question
url: https://discuss.hashicorp.com/c/boundary
about: For increased visibility, please post questions on the discussion forum.
-23
View File
@@ -1,23 +0,0 @@
---
name: Feature request
about: Suggest something!
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Explain any additional use-cases**
If there are any use-cases that would help us understand the use/need/value please share them as they can help us decide on acceptance and prioritization.
**Additional context**
Add any other context or screenshots about the feature request here.
-6
View File
@@ -1,6 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
-30
View File
@@ -1,30 +0,0 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
addons:
- changed-files:
- any-glob-to-any-file: "addons/**/*"
api-addon:
- changed-files:
- any-glob-to-any-file: "addons/api/**/*"
auth-addon:
- changed-files:
- any-glob-to-any-file: "addons/auth/**/*"
styles-addon:
- changed-files:
- any-glob-to-any-file: "addons/rose/**/*"
ui:
- changed-files:
- any-glob-to-any-file: "ui/**/*"
admin:
- changed-files:
- any-glob-to-any-file: "ui/admin/**/*"
desktop:
- changed-files:
- any-glob-to-any-file: "ui/desktop/**/*"
-28
View File
@@ -1,28 +0,0 @@
# Description
<!-- Add a brief description of changes here -->
<!-- Uncomment line below to manually add link to JIRA ticket -->
<!-- :tickets: [Jira ticket](https://hashicorp.atlassian.net/browse/JIRA_TICKET_NUMBER) -->
## Screenshots (if appropriate)
## How to Test
<!-- Add steps to test this change. Include any other necessary relevant links -->
## Checklist
<!-- strikethrough the checklist item that is not relevant to your change -->
- [ ] I have added before and after screenshots for UI changes
- [ ] I have added JSON response output for API changes
- [ ] I have added steps to reproduce and test for bug fixes in the description
- [ ] 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.
-94
View File
@@ -1,94 +0,0 @@
#!/usr/bin/env bash
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
set -euo pipefail
# Configure Git
git config --global user.email "hc-github-team-secure-boundary@hashicorp.com"
git config --global user.name "github-team-secure-boundary"
# Fetch branches from ENT
git fetch origin
BRANCH=${1}
echo "BRANCH to merge is $BRANCH"
git checkout "${BRANCH}"
# Checkout OSS repo
git remote add oss-remote https://github.com/hashicorp/boundary-ui.git
git fetch oss-remote
# Merge oss/${BRANCH} into ent/${BRANCH}
git_merge_branch="${2}"
git checkout -b "${git_merge_branch}"
latest_oss_commit="$(git rev-parse --short oss-remote/${BRANCH})"
echo "Trying to merge the latest oss commit - ${latest_oss_commit} from oss/${BRANCH} into ent/${BRANCH}"
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.
conflicts=$(git diff --name-only --diff-filter=U)
printf "Found conflicts:\n${conflicts}\n"
# Resolve package.json conflicts by taking oss
if echo "$conflicts" | grep -q package.json; then
echo "Checking out oss package.json..."
git checkout --theirs package.json
git add package.json
fi
# 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
if ! git commit --no-edit; then
echo "Auto Merge failed, creating a draft PR"
git merge --abort
git clean -xfd
git fetch oss-remote
git checkout "${OSS_BRANCH}"
git checkout -b "${OSS_LOCAL_BRANCH}"
git push -f --set-upstream origin "${OSS_LOCAL_BRANCH}"
gh pr create \
--draft \
--fill-first \
--label "oss-merge" \
-B "${BASE_BRANCH}" \
-H "${OSS_LOCAL_BRANCH}" \
-a "${ACTOR}" \
-t "[${BASE_BRANCH/oss\/release\//}] OSS to ENT merge of (${SHA::7})" \
-b "${BASE_BRANCH/oss\//} upstream merge of (${SHA::7})
Merge failed, Please fix the conflicts using github UI or using the following commands:
\`\`\`bash
git checkout ${BASE_BRANCH}
git pull
git checkout ${OSS_LOCAL_BRANCH}
git merge ${BASE_BRANCH}
# fix conflicts and commit
git push origin ${OSS_LOCAL_BRANCH}
\`\`\`"
exit 0
fi
fi
# Check that there are actually changes to merge by comparing the
# merge branch to the current checked out branch
if (git diff ${BRANCH} --exit-code > /dev/null); then
echo "there are no changes to merge"
exit 0
fi
git push origin "${git_merge_branch}"
gh pr create \
--fill-first \
--label "oss-merge" \
-B "${BASE_BRANCH}" \
-H "${MERGE_BRANCH}" \
-a ${ACTOR} \
-t "[${BASE_BRANCH/oss\/release\//}] OSS to ENT merge of (${SHA::7})" \
-b "${BASE_BRANCH/oss\//} upstream merge of (${SHA::7})"
gh pr merge --auto --merge
# This PR will be need to be approved manually
-94
View File
@@ -1,94 +0,0 @@
name: Build Admin UI
on:
push:
branches:
- main
- "release/**"
workflow_dispatch:
jobs:
dependencies:
name: Install dependencies
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- 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
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: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
run_install: false
- name: Build
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: admin-ui
path: ./ui/admin/dist/
- name: Upload artifact OSS admin UI
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: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
run_install: false
- name: Build
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
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@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: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda #v4.1.0
with:
run_install: false
- name: Build
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 20
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: admin-ui-hcp
path: ./ui/admin/dist/
-57
View File
@@ -1,57 +0,0 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
name: "CodeQL"
on:
push:
branches: [main]
pull_request:
# The branches below must be a subset of the branches above
branches: [main]
schedule:
- cron: '0 19 * * 4'
jobs:
analyze:
name: Analyze
runs-on: ${{ fromJSON(vars.RUNNER) }}
strategy:
fail-fast: false
matrix:
# Override automatic language detection by changing the below list
# Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
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.
# 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
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@70df9def86d22bf0ea4e7f8b956e7b92e7c1ea22 # codeql-bundle-v2.20.7
-15
View File
@@ -1,15 +0,0 @@
name: Add Copyright Headers
on: pull_request
jobs:
copywrite:
runs-on: ${{ fromJSON(vars.RUNNER) }}
permissions:
contents: write
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: hashicorp/setup-copywrite@32638da2d4e81d56a0764aa1547882fc4d209636 # v1.1.3
- 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
-107
View File
@@ -1,107 +0,0 @@
on:
issues:
types: [opened, closed, deleted, reopened]
pull_request_target:
types: [opened, closed, reopened]
issue_comment: # Also triggers when commenting on a PR from the conversation view
types: [created]
workflow_dispatch:
name: Jira Sync
jobs:
sync:
runs-on: ${{ fromJSON(vars.RUNNER) }}
name: Jira sync
steps:
- name: Check if community user
if: github.event.action == 'opened'
id: boundary-team-role
run: |
TEAM=boundary
ROLE="$(gh api orgs/hashicorp/teams/${TEAM}/memberships/${{ github.actor }} | jq -r '.role | select(.!=null)')"
if [[ -n ${ROLE} ]]; then
echo "Actor ${{ github.actor }} is a ${TEAM} team member, skipping ticket creation"
else
echo "Actor ${{ github.actor }} is not a ${TEAM} team member"
fi
echo "role=${ROLE}" >> $GITHUB_OUTPUT
env:
GITHUB_TOKEN: ${{ secrets.JIRA_SYNC_GITHUB_TOKEN }}
- name: Set ticket type
if: github.event.action == 'opened' && !steps.boundary-team-role.outputs.role
id: set-ticket-type
run: |
if [[ "${{ github.event_name }}" == "pull_request_target" ]]; then
echo "type=PR" >> $GITHUB_OUTPUT
else
echo "type=ISS" >> $GITHUB_OUTPUT
fi
- name: Create ticket
if: github.event.action == 'opened' && !steps.boundary-team-role.outputs.role
uses: tomhjp/gh-action-jira-create@3ed1789cad3521292e591a7cfa703215ec1348bf # v0.2.1
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
with:
project: ICU
issuetype: "GH Issue"
summary: "${{ github.event.repository.name }} [${{ steps.set-ticket-type.outputs.type }} #${{ github.event.issue.number || github.event.pull_request.number }}]: ${{ github.event.issue.title || github.event.pull_request.title }}"
description: "${{ github.event.issue.body || github.event.pull_request.body }}\n\n_Created from GitHub Action for ${{ github.event.issue.html_url || github.event.pull_request.html_url }}, from ${{ github.actor }}_"
# customfield_10089 is Issue Link custom field
# customfield_10091 is team custom field
extraFields: '{"customfield_10089": "${{ github.event.issue.html_url || github.event.pull_request.html_url }}"}'
- name: Search
if: github.event.action != 'opened'
id: search
uses: tomhjp/gh-action-jira-search@04700b457f317c3e341ce90da5a3ff4ce058f2fa # v0.2.2
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
with:
# cf[10089] is Issue Link custom field
jql: 'issuetype = "GH Issue" and cf[10089]="${{ github.event.issue.html_url || github.event.pull_request.html_url }}"'
- name: Sync comment
if: github.event.action == 'created' && steps.search.outputs.issue
uses: tomhjp/gh-action-jira-comment@6eb6b9ead70221916b6badd118c24535ed220bd9 # v0.2.0
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
with:
issue: ${{ steps.search.outputs.issue }}
comment: "${{ github.actor }} ${{ github.event.review.state || 'commented' }}:\n\n${{ github.event.comment.body || github.event.review.body }}\n\n${{ github.event.comment.html_url || github.event.review.html_url }}"
- name: Transitions
id: transitions
if: steps.search.outputs.issue
run: |
if [[ "${{ github.event.action }}" == "closed" || "${{ github.event.action }}" == "deleted" ]]; then
echo "Closing ticket"
echo "name=Done" >> "$GITHUB_OUTPUT"
elif [[ "${{ github.event.action }}" == "reopened" ]]; then
echo "Reopening ticket"
echo "name=Reopen" >> "$GITHUB_OUTPUT"
fi
# Transition issue API reference: https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-issueidorkey-transitions-post
- name: Transition ticket
if: steps.transitions.outputs.name
run: |
transitions="$(curl --silent \
--url "${{ secrets.JIRA_BASE_URL }}rest/api/3/issue/${{ steps.search.outputs.issue }}/transitions" \
--user "${{ secrets.JIRA_USER_EMAIL }}:${{ secrets.JIRA_API_TOKEN }}" \
--header "Accept: application/json")"
id="$(echo "${transitions}" | jq -r '.transitions[] | select(.name == "${{ steps.transitions.outputs.name }}") | .id')"
curl --silent \
--url "${{ secrets.JIRA_BASE_URL }}rest/api/3/issue/${{ steps.search.outputs.issue }}/transitions" \
--user "${{ secrets.JIRA_USER_EMAIL }}:${{ secrets.JIRA_API_TOKEN }}" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data "$(printf '{"transition": {"id": "%s"}}' "${id}")"
-11
View File
@@ -1,11 +0,0 @@
name: "Pull Request Labeler"
on:
- pull_request_target
jobs:
triage:
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
-74
View File
@@ -1,74 +0,0 @@
name: Validate Monorepo
on: pull_request
jobs:
dependencies:
name: Install dependencies
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- 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
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --frozen-lockfile
compliance:
name: License Compliance
needs: [dependencies]
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- 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
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: ${{ fromJSON(vars.RUNNER) }}
timeout-minutes: 5
steps:
- 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
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --offline
- run: pnpm lint
test:
name: Test
needs: [lint]
runs-on: ${{ fromJSON(vars.RUNNER) }}
timeout-minutes: 15
steps:
- uses: browser-actions/setup-chrome@c785b87e244131f27c9f19c1a33e2ead956ab7ce # v1.7.3
with:
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
cache: 'pnpm'
cache-dependency-path: '**/pnpm-lock.yaml'
- run: pnpm install --offline
- run: pnpm test
@@ -1,25 +0,0 @@
name: Trigger OSS to Enterprise Merge
on:
pull_request_target:
types:
- closed
branches:
- main
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: ${{ fromJSON(vars.RUNNER) }}
steps:
- name: Trigger Merge
env:
GIT_REF: ${{ github.ref_name }}
GIT_SHA: ${{ github.sha }}
GH_PAT: ${{ secrets.ELEVATED_GITHUB_TOKEN }}
GIT_ACTOR: ${{ github.actor }}
run: |
curl -H "Authorization: token $GH_PAT" \
-H 'Accept: application/json' \
-d "{\"event_type\": \"oss-merge\", \"client_payload\": {\"git-ref\": \"${GIT_REF}\", \"git-sha\": \"${GIT_SHA}\", \"git-actor\": \"${GIT_ACTOR}\" }}" \
"https://api.github.com/repos/hashicorp/boundary-ui-enterprise/dispatches"
-24
View File
@@ -1,24 +0,0 @@
name: OSS → ENT Merge
on:
repository_dispatch:
types: [ oss-merge ]
jobs:
oss-merge:
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
token: ${{ secrets.ELEVATED_GITHUB_TOKEN }}
- run: |
git fetch --prune --unshallow
./.github/scripts/merge.sh "${BASE_BRANCH}" "${MERGE_BRANCH}"
env:
BASE_BRANCH: ${{ github.event.client_payload.git-ref }}
OSS_BRANCH: oss-remote/${{ github.event.client_payload.git-ref }}
OSS_LOCAL_BRANCH: oss/${{ github.event.client_payload.git-ref }}-${{ github.event.client_payload.git-sha }}
MERGE_BRANCH: oss/merge-${{ github.event.client_payload.git-ref }}-${{github.event.client_payload.git-sha}}
GITHUB_TOKEN: ${{secrets.ELEVATED_GITHUB_TOKEN }}
MERGE_APPROVE_TOKEN: ${{secrets.ELEVATED_GITHUB_TOKEN }}
ACTOR: ${{ github.event.client_payload.git-actor }}
SHA: ${{github.event.client_payload.git-sha}}
-115
View File
@@ -1,115 +0,0 @@
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
-22
View File
@@ -1,22 +0,0 @@
name: "Trigger Boundary Desktop release"
on:
push:
tags:
- '*'
jobs:
trigger-gha-release:
runs-on: ${{ fromJSON(vars.RUNNER) }}
steps:
- 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-desktop-releases
run: |
export GITHUB_TOKEN="${{ secrets.ELEVATED_GITHUB_TOKEN }}"
gh workflow run release.yml \
--repo hashicorp/boundary-desktop-releases \
--ref main \
-f TAG="${GITHUB_REF#refs/tags/}"
-6
View File
@@ -1,6 +0,0 @@
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
url_license = "https://github.com/hashicorp/boundary-ui/blob/main/LICENSE"
url_project_website = "https://learn.hashicorp.com/tutorials/boundary/getting-started-desktop-app"
url_source_repository = "https://github.com/hashicorp/boundary-ui"
Binary file not shown.
+7 -7
View File
@@ -3,21 +3,21 @@ License text copyright (c) 2020 MariaDB Corporation Ab, All Rights Reserved.
Parameters
Licensor: HashiCorp, Inc.
Licensed Work: The Licensed Work is (c) 2024 HashiCorp, Inc.
Licensor: International Business Machines Corporation (IBM)
Licensed Work: The Licensed Work is (c) 2024 IBM Corp.
Additional Use Grant: You may make production use of the Licensed Work, provided
Your use does not include offering the Licensed Work to third
parties on a hosted or embedded basis in order to compete with
HashiCorp's paid version(s) of the Licensed Work. For purposes
IBM Corp's paid version(s) of the Licensed Work. For purposes
of this license:
A "competitive offering" is a Product that is offered to third
parties on a paid basis, including through paid support
arrangements, that significantly overlaps with the capabilities
of HashiCorp's paid version(s) of the Licensed Work. If Your
of IBM Corp's paid version(s) of the Licensed Work. If Your
Product is not a competitive offering when You first make it
generally available, it will not become a competitive offering
later due to HashiCorp releasing a new version of the Licensed
later due to IBM Corp releasing a new version of the Licensed
Work with additional capabilities. In addition, Products that
are not provided on a paid basis are not competitive.
@@ -33,10 +33,10 @@ Additional Use Grant: You may make production use of the Licensed Work, provided
Hosting or using the Licensed Work(s) for internal purposes
within an organization is not considered a competitive
offering. HashiCorp considers your organization to include all
offering. IBM Corp considers your organization to include all
of your affiliates under common control.
For binding interpretive guidance on using HashiCorp products
For binding interpretive guidance on using IBM Corp products
under the Business Source License, please visit our FAQ.
(https://www.hashicorp.com/license-faq)
Change Date: Four years from the date the Licensed Work is published.
+28
View File
@@ -0,0 +1,28 @@
Threshold UI
Copyright (c) 2026 CyberCove LLC
This repository is a community fork of "Boundary UI"
(https://github.com/hashicorp/boundary-ui), the admin web UI and desktop
client for HashiCorp Boundary.
Upstream work: Copyright (c) HashiCorp, Inc. 2020-2023;
Copyright (c) IBM Corp. 2024-2026
Upstream license: Business Source License 1.1 (see LICENSE)
The upstream LICENSE and per-file copyright / SPDX headers are retained
unchanged. Modifications made in this fork are provided under the same
license terms (BUSL-1.1), including its Additional Use Grant and Change
Date as stated in LICENSE.
This project is an independent community effort. It is NOT affiliated with,
endorsed by, or sponsored by HashiCorp, Inc. or IBM Corp. "HashiCorp",
"Boundary", and related marks and logos are trademarks of their respective
owners; they are used here only to describe the upstream origin of this work
and to name the upstream CLI/API this software interoperates with. The
upstream logos and brand art have been removed and replaced with plain
placeholder marks.
Third-party components keep their own licenses (see pnpm-lock.yaml and the
`pnpm compliance:licenses` script). The HashiCorp Design System packages
(@hashicorp/design-system-components, -tokens, @hashicorp/flight-icons) are
consumed unmodified from the public npm registry under their own licenses.
+36 -5
View File
@@ -1,10 +1,41 @@
# Boundary UI Monorepo
![](boundary.png)
![Validate Monorepo](https://github.com/hashicorp/boundary-ui/workflows/Validate%20Monorepo/badge.svg)
# Threshold UI Monorepo
This monorepo contains multiple projects, including UIs and addons, used by
Boundary.
Threshold (the admin web UI and the desktop client).
## About this fork
This repository is a community fork of
[hashicorp/boundary-ui](https://github.com/hashicorp/boundary-ui), rebranded
for the Threshold project (a community fork of Boundary CE). It is licensed
under the upstream Business Source License 1.1 (see [LICENSE](LICENSE) and
[NOTICE](NOTICE)) and is **not affiliated with, endorsed by, or sponsored by
HashiCorp or IBM**.
What changed relative to upstream:
- User-visible product name is Threshold (window titles, menus, about dialog,
installer/package names, app id `net.anhonesthost.cybercove.threshold`).
API paths, field names, protocol strings and environment variable names are
unchanged for compatibility with the server. The desktop client's persisted
settings are copied from the former "Boundary" user-data directory on first
launch.
- The desktop client looks for a `threshold` CLI first, then `boundary`.
- HashiCorp/IBM logos and brand art were removed and replaced with plain
placeholder marks.
- Nothing contacts HashiCorp services by default. The in-app updater, the
"unsupported controller" release-metadata lookup, and the CLI bundling
download are disabled until you configure your own hosts:
`THRESHOLD_UPDATE_FEED_URL` (desktop build, updater feed),
`THRESHOLD_RELEASES_METADATA_URL` / `THRESHOLD_RELEASES_PAGE_URL`
(desktop build, release links) and `THRESHOLD_CLI_RELEASES_URL` /
`THRESHOLD_CLI_ARCHIVE_PREFIX` (used with `SETUP_CLI=true` to bundle a CLI).
- Documentation links still point at the upstream Boundary documentation,
which is user-initiated only.
- Upstream HashiCorp-internal GitHub workflows and release metadata were
removed; CI lives in `.gitea/workflows/ci.yml`.
Upstream history, CHANGELOGs and copyright headers are preserved.
This top-level repository provides limited common tasks, such as installation
and commit assistance. However, most tasks must be executed from within a
-14
View File
@@ -1,14 +0,0 @@
# unconventional js
/blueprints/*/files/
# compiled output
/declarations/
/dist/
# misc
/coverage/
!.*
.*/
# ember-try
/.node_modules.ember-try/
-67
View File
@@ -1,67 +0,0 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
'use strict';
module.exports = {
root: true,
parser: '@babel/eslint-parser',
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
// This is specific babel-config. If grows consider creating a babel config file
requireConfigFile: false,
babelOptions: {
plugins: [
['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }],
],
},
// end of babel-config
},
plugins: ['ember'],
extends: ['eslint:recommended', 'plugin:ember/recommended', 'prettier'],
env: {
browser: true,
},
rules: {
'ember/no-get': 'off',
'ember/no-get-with-default': 'off',
'ember/no-computed-properties-in-native-classes': 'off',
'ember/no-assignment-of-untracked-properties-used-in-tracking-contexts':
'off',
},
overrides: [
// node files
{
files: [
'./.eslintrc.js',
'./.prettierrc.js',
'./.template-lintrc.js',
'./ember-cli-build.js',
'./index.js',
'./testem.js',
'./blueprints/*/index.js',
'./config/**/*.js',
'./tests/dummy/config/**/*.js',
],
parserOptions: {
sourceType: 'script',
},
env: {
browser: false,
node: true,
},
extends: ['plugin:n/recommended'],
},
{
// test files
files: ['tests/**/*-test.{js,ts}'],
extends: ['plugin:qunit/recommended'],
rules: {
'qunit/require-expect': [2, 'except-simple'],
},
},
],
};
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+38 -5
View File
@@ -21,17 +21,50 @@ 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": "workspace:*"`, 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:
This addon also includes Mirage mocks. To include the `miragejs` dependency and this addon's mirage handlers configure the consuming app's `config/environment.js`
```js
'ember-cli-mirage': {
directory: '../../addons/api/mirage'
mirage: {
enabled: true
}
```
Include `miragejs` and any api addon `peerDependencies` used by the mirage as dev dependencies in the consuming app,
eg: `@faker-js/faker`, otherwise mirage handler code might fail with an error.
To have mirage start and intercept requests when the application starts:
1. Add the `@embroider/macros` dependency to your application
2. Configure `@embroider/macros` with `startMirageWithApp` based on app's config within `ember-cli-build.js`:
```js
// ember-cli-build.js
module.exports = async function (defaults) {
// load the app's config
const { EMBER_ENV } = process.env;
var config = require('./config/environment')(EMBER_ENV);
const app = new EmberApp(defaults, {
'@embroider/macros': {
setOwnConfig: {
startMirageWithApp: config.mirage?.enabled ?? false
},
},
});
}
```
3. Finally, use the `@embroider/macros` config value for `startMirageWithApp` in `app/app.js` to conditionally start mirage:
```js
import { macroCondition, importSync, getOwnConfig, isTesting } from '@embroider/macros';
if (macroCondition(getOwnConfig().startMirageWithApp && !isTesting())) {
const startServer = importSync('[name of host app]/mirage/config').default;
startServer({});
}
```
## Installation
See monorepo README for installation instructions.
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -11,7 +11,7 @@ import { underscore } from '@ember/string';
/**
* This test helper can be used to help setup your sinon stubs in your tests.
* Must be called after setupMirage.
* Must be called after setupMirage and setupDesktopContextBridgeApiMock in tests.
*
* ```js
* import setupStubs from 'api/test-support/handlers/cache-daemon-search';
@@ -19,14 +19,15 @@ import { underscore } from '@ember/string';
* module('Acceptance | my test', function(hooks) {
* setupApplicationTest(hooks);
* setupMirage(hooks);
* setupDesktopContextBridgeApiMock(hooks);
* setupStubs(hooks);
*
* // add your actual tests here
* });
* ```
*
* This will setup a stub for the IPC service and include helper methods to
* help setup what the cache daemon search command returns.
* This will setup a stub for window.desktop.daemon.searchCacheDaemon and include
* helper methods to help setup what the cache daemon search command returns.
*
* @module Test Helpers
* @public
@@ -35,9 +36,6 @@ export default function setupStubs(hooks) {
let stubTypes = [];
hooks.beforeEach(function () {
const ipcService = this.owner.lookup('service:ipc');
this.ipcStub = sinon.stub(ipcService, 'invoke');
/**
* We aim to still use mirage data when stubbing out the cache daemon
* search. However, the handler expects the search data to be raw JSON from
@@ -56,20 +54,18 @@ export default function setupStubs(hooks) {
stubTypes = types;
types.forEach((type, i) => {
let models;
let resourceName;
if (typeOf(type) === 'object') {
models = type.func();
resourceName = type.resource;
} else {
models = this.server.schema[type].all().models;
resourceName = type;
}
this.searchCacheDaemonStub.onCall(i).callsFake(() => {
let models;
let resourceName;
if (typeOf(type) === 'object') {
models = type.func();
resourceName = type.resource;
} else {
models = this.server.schema[type].all().models;
resourceName = type;
}
this.ipcStub
.withArgs('searchCacheDaemon')
.onCall(i)
.returns({
return {
[underscore(resourceNames[singularize(resourceName)])]: models.map(
(model) => {
// Use internal serializer to serialize the model correctly
@@ -82,7 +78,8 @@ export default function setupStubs(hooks) {
return JSON.parse(JSON.stringify(modelData));
},
),
});
};
});
});
};
});
@@ -90,22 +87,19 @@ export default function setupStubs(hooks) {
hooks.afterEach(function () {
// Verify the number of mocks we set up match with how
// many times the cache daemon was called with
sinon.assert.callCount(
this.ipcStub.withArgs('searchCacheDaemon'),
stubTypes.length,
);
sinon.assert.callCount(this.searchCacheDaemonStub, stubTypes.length);
stubTypes.forEach((type, i) => {
// Assert that the stub was called with the resource we're trying to mock
// so we don't mistakenly mock the wrong resource
const ipcCall = this.ipcStub.withArgs('searchCacheDaemon').getCall(i);
const call = this.searchCacheDaemonStub.getCall(i);
let resource = type;
if (typeOf(type) === 'object') {
resource = type.resource;
}
const mappedResourceName = resourceNames[singularize(resource)];
sinon.assert.match(ipcCall.args[1], { resource: mappedResourceName });
sinon.assert.match(call.args[0], { resource: mappedResourceName });
});
sinon.restore();
@@ -0,0 +1,34 @@
/**
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
import { settled } from '@ember/test-helpers';
export function createSetupMirage(startMirage) {
return function setupMirage(hooks) {
hooks.beforeEach(function () {
if (!this.owner) {
throw new Error(
'Must call one of the ember-qunit setupTest() / setupRenderingTest() / setupApplicationTest() first',
);
}
// the environment property here is configuration to the mirage server:
// https://github.com/miragejs/miragejs/blob/7ff4f3f6fe56bf0cb1648f5af3f5210fcb07e20b/types/index.d.ts#L383
// It is not related to ember's build environment. In this case for mirage the "test" environment does
// not load the default scenario:
// https://github.com/miragejs/miragejs/blob/7ff4f3f6fe56bf0cb1648f5af3f5210fcb07e20b/lib/server.js#L302
this.server = startMirage({ environment: 'test' });
});
hooks.afterEach(function () {
return settled().then(() => {
if (this.server) {
this.server.shutdown();
delete this.server;
}
});
});
};
}
@@ -1,35 +0,0 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
/**
* This test helper can help set up and cleanup the database in your tests.
*
* ```js
* import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
*
* module('Acceptance | my test', function(hooks) {
* setupApplicationTest(hooks);
* setupIndexedDb(hooks);
*
* // add your actual tests here
* });
* ```
*
* @param hooks
*/
export function setupIndexedDb(hooks) {
hooks.beforeEach(async function () {
const indexedDb = this.owner.lookup('service:indexed-db');
await indexedDb.setup(`test-indexed-db-${Date.now()}`);
});
hooks.afterEach(async function () {
const indexedDb = this.owner.lookup('service:indexed-db');
await indexedDb.db.delete();
});
}
export default setupIndexedDb;
@@ -0,0 +1,37 @@
/**
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
import { v4 as uuidv4 } from 'uuid';
/**
* This test helper can help set up and cleanup the database in your tests.
*
* ```js
* import { setupSqlite } from 'api/test-support/helpers/sqlite';
*
* module('Acceptance | my test', function(hooks) {
* setupApplicationTest(hooks);
* setupSqlite(hooks);
*
* // add your actual tests here
* });
* ```
*
* @param hooks
*/
export function setupSqlite(hooks) {
hooks.beforeEach(async function () {
const sqliteDb = this.owner.lookup('service:sqlite');
await sqliteDb.setup(`test-sqlite-${uuidv4()}`);
});
hooks.afterEach(async function () {
const sqliteDb = this.owner.lookup('service:sqlite');
await sqliteDb.deleteDatabase();
});
}
export default setupSqlite;
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+5 -4
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -16,7 +16,7 @@ class InvalidRolePrincipalTypeError extends Error {
export default class RoleAbility extends ModelAbility {
// =services
@service can;
@service abilities;
// =permissions
@@ -59,10 +59,11 @@ export default class RoleAbility extends ModelAbility {
const type = this.model.constructor.modelName;
const typeIsValid =
type === 'user' || type === 'group' || type === 'managed-group';
if (!typeIsValid)
if (!typeIsValid) {
throw new InvalidRolePrincipalTypeError(
`Expected a role principal of type 'user', 'group', or 'managed-group'. Got '${type}'.`,
);
return this.can.can(`read ${type}`, this.model);
}
return this.abilities.can(`read ${type}`, this.model);
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+3 -2
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -44,7 +44,8 @@ export default class TargetAbility extends ModelAbility {
*/
get canAddInjectedApplicationCredentialSources() {
return (
this.model.isSSH && this.hasAuthorizedAction('add-credential-sources')
(this.model.isSSH || this.model.isRDP) &&
this.hasAuthorizedAction('add-credential-sources')
);
}
/**
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+37 -5
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -131,11 +131,34 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
// 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
try {
result = await super.query(store, schema, queryObject);
} catch (e) {
// If we hit a rate limit mid-pagination, return whatever
// data has been accumulated so far rather than throwing and leaving
// the user stuck with nothing to show.
// Without a list_token this is the very first request with nothing to
// show, so rethrow and let normal error handling apply.
if (e?.errors?.[0]?.isRateLimited && queryObject.list_token) {
result ??= {};
result.items = data;
result.response_type = 'complete';
result.meta = {
...result.meta,
rateLimitWarning: { retryAfter: e.errors[0].retryAfter },
};
return prenormalizeArrayResponse(result);
}
// For all other errors (or a 429 on the very first request with
// no data yet), rethrow so normal error handling applies.
throw e;
}
// Add the result items to a data array
if (result && result.items) {
data.push(...result.items);
//pass in the list token for subsequent calls to fetch the remaining list items
// Pass in the list token for subsequent calls to fetch the remaining list items
queryObject.list_token = result.list_token;
}
} while (
@@ -237,6 +260,7 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
* - `403 isForbidden`: the session is authenticated but does not have
* permission to perform the requested action
* - `404 isNotFound`: the requested resource could not be found
* - `429 isRateLimited`: the client has exceeded the rate limit
* - `500 isServer`: an internal server error occurred
* - `isUnknown`: an error occurred, but we don't know which or
* we don't distinguish it yet
@@ -248,7 +272,7 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
* @param {Object} payload
* @return {Array} errors payload
*/
normalizeErrorResponse(/*status, headers, payload*/) {
normalizeErrorResponse(status, headers /*, payload*/) {
const errors = super.normalizeErrorResponse(...arguments);
if (isArray(errors)) {
errors.forEach((error) => {
@@ -262,6 +286,14 @@ export default class ApplicationAdapter extends RESTAdapter.extend(
case 404:
error.isNotFound = true;
break;
case 429:
error.isRateLimited = true;
// Attach rate-limit metadata from response headers so downstream
// error handlers can inform the user when they may retry.
error.retryAfter = Number(
headers['Retry-After'] ?? headers['retry-after'],
);
break;
case 500:
error.isServer = true;
break;
+2 -2
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -23,7 +23,7 @@ export default class HostCatalogAdapter extends ApplicationAdapter {
try {
const pluginName = snapshot.attr('plugin')?.name;
if (pluginName) url = `${url}?plugin_name=${pluginName}`;
} catch (e) {
} catch {
// Ignore any adapter errors here
}
}
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -23,7 +23,7 @@ export default class SessionRecordingAdapter extends ApplicationAdapter {
let method;
try {
method = snapshot?.adapterOptions?.method;
} catch (e) {
} catch {
// Ignore any adapter errors here
}
if (method === 'download') {
+2 -2
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -22,7 +22,7 @@ export default class StorageBucketAdapter extends ApplicationAdapter {
let pluginName;
try {
pluginName = snapshot?.attr('plugin')?.name;
} catch (e) {
} catch {
// Ignore any adapter errors here
}
if (requestType === 'createRecord' && pluginName) {
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -81,9 +81,10 @@ export default class GeneratedCredentialLibraryModel extends BaseModel {
})
credential_type;
@attr('object-as-array', {
@attr('object', {
for: 'vault-generic',
description: 'It indicates the credential mapping overrides.',
emptyObjectIfMissing: true,
})
credential_mapping_overrides;
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -51,17 +51,17 @@ export default class GeneratedCredentialModel extends BaseModel {
})
version;
// =attributes (username_password, ssh_private_key)
// =attributes (username_password, ssh_private_key, username_password_domain)
@attr('string', {
for: ['username_password', 'ssh_private_key'],
for: ['username_password', 'ssh_private_key', 'username_password_domain'],
isNestedAttribute: true,
description: 'The username for credential.',
})
username;
// =attributes (username_password)
// =attributes (username_password, username_password_domain, password)
@attr('string', {
for: 'username_password',
for: ['username_password', 'username_password_domain', 'password'],
isNestedAttribute: true,
isSecret: true,
description: 'The password for credential.',
@@ -92,4 +92,12 @@ export default class GeneratedCredentialModel extends BaseModel {
description: 'The secret associated with credential.',
})
json_object;
// =attributes (username_password_domain)
@attr('string', {
for: 'username_password_domain',
isNestedAttribute: true,
description: 'The domain for credential.',
})
domain;
}
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -72,7 +72,7 @@ export default class GeneratedHostCatalogModel extends BaseModel {
@attr('string', {
for: {
type: 'plugin',
name: ['aws', 'gcp'],
name: ['aws', 'azure', 'gcp'],
},
description:
'An expression used to filter the workers that have network access to a service that is hosting the external object store.',
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -96,19 +96,19 @@ export default class GeneratedSessionRecordingModel extends BaseModel {
})
duration;
@attr('string', {
@attr({
description:
'The current state of the session recording. One of "started", "available" and "unknown".',
'The detailed state of the session recording. This contains storage_state, syncing_error_details, and verification_error_details.',
readOnly: true,
})
state;
recording_state;
@attr('string', {
description:
'Any error seen during the closing of the session recording. Currently only set if state is "unknown".',
'The availability of the session recording. One of "available" or "not available".',
readOnly: true,
})
error_details;
availability;
@attr('date', {
description: 'The time until a session recording is required to be stored.',
@@ -122,4 +122,19 @@ export default class GeneratedSessionRecordingModel extends BaseModel {
readOnly: true,
})
delete_after;
// Deprecated: These two fields should be removed once support for RDP is added.
@attr('string', {
description:
'The current state of the session recording. One of "started", "available" and "unknown".',
readOnly: true,
})
state;
@attr('string', {
description:
'Any error seen during the closing of the session recording. Currently only set if state is "unknown".',
readOnly: true,
})
error_details;
}
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -59,7 +59,6 @@ const fetchControllerData = async (context, next) => {
*/
export default class CacheDaemonHandler {
@service session;
@service ipc;
constructor(context) {
setOwner(this, getOwner(context));
@@ -70,9 +69,8 @@ export default class CacheDaemonHandler {
case 'query': {
const { store, data } = context.request;
const { type, query, options: { pushToStore = true } = {} } = data;
const isCacheDaemonRunning = await this.ipc.invoke(
'isCacheDaemonRunning',
);
const isCacheDaemonRunning =
await window.desktop.daemon.isCacheDaemonRunning();
// eslint-disable-next-line no-unused-vars
let { recursive, scope_id, page, pageSize, ...remainingQuery } = query;
@@ -101,6 +99,14 @@ export default class CacheDaemonHandler {
const token = sessionData?.token;
const resourceName = resourceNames[type];
if (remainingQuery.query?.sort) {
const { attribute, direction } = remainingQuery.query.sort;
if (attribute && direction) {
remainingQuery.sort_by = attribute;
remainingQuery.sort_direction = direction;
}
}
remainingQuery = {
...remainingQuery,
query: searchQuery,
@@ -111,23 +117,19 @@ export default class CacheDaemonHandler {
let cacheDaemonResults = {};
try {
cacheDaemonResults = await this.ipc.invoke(
'searchCacheDaemon',
remainingQuery,
);
cacheDaemonResults =
await window.desktop.daemon.searchCacheDaemon(remainingQuery);
} catch (e) {
// If we got a 403, most likely the cache daemon was restarted and our token is no longer valid
// I'm not sure if we can get a 401 since we always send a token but we'll handle it in the same way
if (e.statusCode === 403 || e.statusCode === 401) {
try {
await this.ipc.invoke('addTokenToDaemons', {
await window.desktop.daemon.addTokenToDaemons({
tokenId: auth_token_id,
token,
});
cacheDaemonResults = await this.ipc.invoke(
'searchCacheDaemon',
remainingQuery,
);
cacheDaemonResults =
await window.desktop.daemon.searchCacheDaemon(remainingQuery);
} catch (err) {
// If it fails again just fall back to fetching controller data
__electronLog?.error(
@@ -1,242 +0,0 @@
/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import { modelIndexes } from 'api/services/indexed-db';
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';
/**
* Handler to sit in front of the API request layer
* so we can handle any caching with indexedDb first
*/
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;
// TODO: Remove storeToken option as this is a temporary fix for auth-methods.
const {
type,
query,
options: {
pushToStore = true,
peekIndexedDB = false,
storeToken = true,
} = {},
} = data;
const supportedModels = Object.keys(modelIndexes);
const { db: indexedDb } = this.indexedDb ?? {};
// Go through normal flow if we don't yet support the model
// or if we don't have an indexedDb instance
if (!supportedModels.includes(type) || !indexedDb) {
return next(context.request);
}
let { page, pageSize, query: queryObj, ...remainingQuery } = query;
const adapter = store.adapterFor(type);
const schema = store.modelFor(type);
const serializer = store.serializerFor(type);
if (!peekIndexedDB) {
const tokenKey = `${type}-${hashCode(remainingQuery)}`;
let payload;
let listToken;
let writeToIndexedDbPromise;
if (storeToken) {
const tokenObj = await indexedDb.token.get(tokenKey);
listToken = tokenObj?.token;
}
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,
});
}
listToken = payload.list_token;
// 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 writeToIndexedDbPromise;
}
// Results returned in JSON API reponse, but in a format optimized for indexedDb
const indexedDbResults = await queryIndexedDb(
indexedDb,
type,
queryObj,
);
// 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,
});
});
// Sort the results
const sortedResults = sortResults(normalizedResults, {
querySort: queryObj?.sort,
schema,
});
// 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
// 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: indexedDbResults.length };
return records;
}
default:
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);
}
}
+308
View File
@@ -0,0 +1,308 @@
/**
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
import { getOwner, setOwner } from '@ember/owner';
import { service } from '@ember/service';
import { modelMapping } from 'api/services/sqlite';
import { get } from '@ember/object';
import { typeOf } from '@ember/utils';
import { hashCode } from '../utils/hash-code';
import { generateSQLExpressions } from '../utils/sqlite-query';
const isISODateString = (str) =>
typeOf(str) === 'string' &&
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z?$/.test(str);
export default class SqliteHandler {
@service sqlite;
batchLimit = 5_000;
constructor(context) {
setOwner(this, getOwner(context));
}
async request(context, next) {
switch (context.request.op) {
case 'query': {
const { store, data } = context.request;
const {
type,
query,
options: {
pushToStore = true,
peekDb = false,
storeToken = true,
} = {},
} = data;
const supportedModels = Object.keys(modelMapping);
// Go through normal flow if we don't yet support the model
// or if we don't have a sqlite db instance
if (!supportedModels.includes(type) || !this.sqlite.worker) {
return next(context.request);
}
const adapter = store.adapterFor(type);
const schema = store.modelFor(type);
const serializer = store.serializerFor(type);
let {
page,
pageSize,
select,
query: queryObj,
...remainingQuery
} = query;
let payload,
listToken,
writeToDbPromise,
totalInsert = 0,
rateLimitWarning;
if (!peekDb) {
let tokenKey = `${type}-${hashCode(remainingQuery)}`;
// The global token key represents a recursive query from global scope,
// which pulls back every resource of this type.
const globalTokenKey = `${type}-${hashCode({ scope_id: 'global', recursive: true })}`;
if (storeToken) {
// Always prefer the global token when it exists for
// any more fine-grained query. The global query already fetched every
// item for this resource type, so we should just re-use it.
if (tokenKey !== globalTokenKey) {
const [globalTokenObj] = await this.sqlite.fetchResource({
...generateSQLExpressions('token', {
filters: { id: [{ equals: globalTokenKey }] },
}),
});
if (globalTokenObj?.token) {
tokenKey = globalTokenKey;
listToken = globalTokenObj.token;
}
}
// Only look up the specific token if no global token was found.
if (!listToken) {
const [tokenObj] = await this.sqlite.fetchResource({
...generateSQLExpressions('token', {
filters: { id: [{ equals: tokenKey }] },
}),
});
listToken = tokenObj?.token;
}
} else {
// 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.
await this.sqlite.deleteResource(type);
}
do {
try {
payload = await adapter.query(store, schema, {
...remainingQuery,
list_token: listToken,
batchLimit: this.batchLimit,
});
totalInsert += payload.items?.length ?? 0;
// Propagate any rate-limit warning the adapter attached
if (payload.meta?.rateLimitWarning) {
rateLimitWarning = payload.meta.rateLimitWarning;
}
// await the previous writeToDbPromise before writing to db again
if (writeToDbPromise) {
await writeToDbPromise;
}
} catch (err) {
payload = await this.retryQueryFailure({
err,
type,
adapter,
store,
schema,
remainingQuery,
});
totalInsert += payload.items?.length ?? 0;
}
listToken = payload.list_token;
writeToDbPromise = this.writeToDb(
payload,
storeToken,
tokenKey,
pushToStore,
serializer,
store,
schema,
type,
);
} while (payload.response_type === 'delta');
await writeToDbPromise;
}
if (totalInsert > 0) {
// If there were any inserts, let sqlite handle running analyze on the DB
await this.sqlite.analyzeDatabase();
}
const { sql, parameters } = generateSQLExpressions(type, queryObj, {
page,
pageSize,
select: select ?? [{ field: 'data' }],
});
const rows = await this.sqlite.fetchResource({
sql,
parameters,
});
const { sql: countSql, parameters: countParams } =
generateSQLExpressions(type, queryObj, {
select: [{ field: '*', isCount: true, alias: 'total' }],
});
const count = await this.sqlite.fetchResource({
sql: countSql,
parameters: countParams,
});
const results = rows.map((item) =>
JSON.parse(item.data, (key, value) =>
// Reviver function to convert any ISO strings back to date objects
// as we had to initially convert them to strings when stored in SQLite
isISODateString(value) ? new Date(value) : value,
),
);
// If we are not pushing to the store, use the raw data with id property
const records = pushToStore
? store.push({ data: results })
: results.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
// 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: count[0].total,
};
if (rateLimitWarning) {
records.meta.rateLimitWarning = rateLimitWarning;
}
return records;
}
default:
return next(context.request);
}
}
async retryQueryFailure({
err,
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 this.sqlite.deleteResource(type);
// 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 { sql, parameters } = generateSQLExpressions('token', {
filters: { id: [{ contains: type }] },
});
const tokenRows = await this.sqlite.fetchResource({
sql,
parameters,
});
const tokenIds = tokenRows.map((row) => row.id);
if (tokenIds.length > 0) {
await this.sqlite.deleteResource('token', tokenIds);
}
return await adapter.query(store, schema, {
...remainingQuery,
});
} else {
throw err;
}
}
async writeToDb(
payload,
storeToken,
tokenKey,
pushToStore,
serializer,
store,
schema,
type,
) {
if (payload.list_token && storeToken) {
await this.sqlite.insertResource('token', [
[tokenKey, payload.list_token],
]);
}
const normalizedPayload = serializer.normalizeResponse(
store,
schema,
payload,
null,
'query',
);
const { data: payloadData } = normalizedPayload;
// Remove any records from the DB if the API indicates they've been deleted
// Additionally remove deleted records from ember data store for symmetry
if (payload.removed_ids?.length > 0) {
await this.sqlite.deleteResource(type, payload.removed_ids);
if (pushToStore) {
payload.removed_ids.forEach((id) => {
const record = store.peekRecord(type, id);
store.unloadRecord(record);
});
}
}
// Store the new data we just got back from the API refresh
const items = payloadData.map((datum) => {
const params = Object.values(modelMapping[type]).map((key) => {
let value;
if (key === 'id') {
value = datum.id;
} else {
value = get(datum, `attributes.${key}`);
}
if (typeOf(value) === 'date') {
return value.toISOString();
}
return value;
});
return [...params, JSON.stringify(datum)];
});
await this.sqlite.insertResource(type, items);
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+31 -4
View File
@@ -1,17 +1,27 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
import GeneratedCredentialLibraryModel from '../generated/models/credential-library';
import {
TYPE_CREDENTIAL_SSH_PRIVATE_KEY,
TYPE_CREDENTIAL_USERNAME_PASSWORD_DOMAIN,
TYPE_CREDENTIAL_USERNAME_PASSWORD,
TYPE_CREDENTIAL_PASSWORD,
} from 'api/models/credential';
/**
* Enum options for credential library.
*/
export const options = {
http_method: ['GET', 'POST'],
key_type: ['ed25519', 'ecdsa', 'rsa'],
credential_types: ['ssh_private_key', 'username_password'],
credential_types: [
TYPE_CREDENTIAL_SSH_PRIVATE_KEY,
TYPE_CREDENTIAL_USERNAME_PASSWORD,
TYPE_CREDENTIAL_USERNAME_PASSWORD_DOMAIN,
TYPE_CREDENTIAL_PASSWORD,
],
mapping_overrides: {
username_password: ['username_attribute', 'password_attribute'],
ssh_private_key: [
@@ -19,12 +29,19 @@ export const options = {
'private_key_passphrase_attribute',
'username_attribute',
],
username_password_domain: [
'username_attribute',
'password_attribute',
'domain_attribute',
],
password: ['password_attribute'],
},
};
export const TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC = 'vault-generic';
export const TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE =
'vault-ssh-certificate';
export const TYPE_CREDENTIAL_LIBRARY_VAULT_LDAP = 'vault-ldap';
/**
* Supported Credential Library types.
@@ -32,6 +49,7 @@ export const TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE =
export const TYPES_CREDENTIAL_LIBRARY = Object.freeze([
TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC,
TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE,
TYPE_CREDENTIAL_LIBRARY_VAULT_LDAP,
]);
export default class CredentialLibraryModel extends GeneratedCredentialLibraryModel {
@@ -52,7 +70,8 @@ export default class CredentialLibraryModel extends GeneratedCredentialLibraryMo
get isVault() {
return (
this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_GENERIC ||
this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE
this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE ||
this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_LDAP
);
}
@@ -71,4 +90,12 @@ export default class CredentialLibraryModel extends GeneratedCredentialLibraryMo
get isVaultSSHCertificate() {
return this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_SSH_CERTIFICATE;
}
/**
* True if credential is a vault ldap type.
* @type {boolean}
*/
get isVaultLDAP() {
return this.type === TYPE_CREDENTIAL_LIBRARY_VAULT_LDAP;
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+6 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
@@ -12,11 +12,16 @@ import GeneratedCredentialModel from '../generated/models/credential';
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 TYPE_CREDENTIAL_USERNAME_PASSWORD_DOMAIN =
'username_password_domain';
export const TYPE_CREDENTIAL_PASSWORD = 'password';
export const TYPES_CREDENTIAL = Object.freeze([
TYPE_CREDENTIAL_USERNAME_PASSWORD,
TYPE_CREDENTIAL_SSH_PRIVATE_KEY,
TYPE_CREDENTIAL_USERNAME_PASSWORD_DOMAIN,
TYPE_CREDENTIAL_JSON,
TYPE_CREDENTIAL_PASSWORD,
]);
export default class CredentialModel extends GeneratedCredentialModel {
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
+1 -1
View File
@@ -1,5 +1,5 @@
/**
* Copyright (c) HashiCorp, Inc.
* Copyright IBM Corp. 2021, 2026
* SPDX-License-Identifier: BUSL-1.1
*/
Loaded 100 of 2616 files, more files were not shown because too many files have changed in this diff. Show more