* adds ember-flight-icons dependecy
* adds inline-json-import babel plugin
* adds flight icon styling
* updates Icon component to support flight icons
* updates Icon component usages to new api and updates name values to flight icon set when available
* fixes tests
* updates icon story with flight mappings and fixes issue with flight icons not rendering in storybook
* adds changelog
* fixes typo in sign action glyph name in transit-key model
* adds comments to icon-map
* updates Icon component to use only supported flight icon sizes
* adds icon transform codemod
* updates icon transform formatting to handle edge case
* runs icon transform on templates
* updates Icon usage in toolbar-filter md and story
* updates tests
* staying with jsondiff
* routing setup
* send compare against data to component after using new adapater method to return the version data.
* functionality
* fix issue on route transition not calling model hook
* formatting
* update version
* changelog
* glimmerize the json-editor component
* catch up
* passing tracked property from child to parent
* pull out of jsonEditor
* fix issue with message
* icon
* fix some issues with right selection
* changes and convert to component
* integration test
* tests
* fixes
* cleanup
* cleanup 2
* fixes
* fix test by spread attributes
* remove log
* remove
* updates secret list header to display badge for all versions
* adds changelog entry
* updates secret list header to only show badge for kv and generic engine types
* adds secret-engine mirage factory
* adds test helper for pushing serialized mirage data into store and returning ember data models
* adds secret engine type version badge display test
* updates mirage application serializer to return singular type key
* installs node-forge
* correctly displays and formats cert metadata
* removes labels
* uses helper in hbs file
* adds named arg to helper
* pki-ca-cert displays common name, issue & expiry date
* alphabetizes some attrs
* adds test for date helper
* creates bar chart component
* WIP//starts styling
* fixes width of bars
* WIP//barchart
* uses d3 max method instead of Math.max
* stacks data
* adds y axis
* fixes styling and spacing
* adds spacing between bars
* styling DONE
* adds legend
* adds tooltip
* tweaks styling adds pointer cursor to rects
* fixes tooltip placement
* moves starget from bar to whole area
* finishes hover selection styling
* cleans up
* cleans up a tiny bit
* stopping point
* adjusts tooltip placemnt
* WIP//clean up time
* sort of not broken
* unbroken, ish
* tooltip position fixed
* truncates text and adds tooltip
* changes tooltip width depending on content
* unbroken
* finishes initial refactor/cleanup
* finishes documentation
* passes in map legend to component
* more tidying
* add export option
* adds grid to header for export button option
* updates comments
* fix variable name change
* moves dataset formatting to parent
* removes unused code"
* adds assertions and empty state if no data
* cleans up comments adds assertion to check for map legend
* adds storybook
* adds changelog
* deletes dummy parent:
* restores index.hbs
* uses scss variables instead
* exchanges more variables
* remove unused variable in storybook
* writes basic test
* removes pauseTest()
* Client count config view
- Switched to toggle button from checkbox and updated the design
- Switched to ember octane
- Update ember concurrency dependency
* Fixed integration tests
* Added changelog
* Update switch label on toggle
* Code cleanup
* Fixed test
* initial setup
* initial validation setup for empty path object.
* removal console logs
* validation on keyup for kv
* in progress
* making some progress
* more progress
* closer
* done with create page now to fix edit page that I broke
* fix secret edit display on create
* test and final touches
* cleanup mountbackendform
* cleanup
* add changelog
* address pr comments
* address styling pr comment
* first round of fixes and setup
* test fixes
* fix dumb options on new method
* test fix
* clean up
* fixes
* clean up
* handle utc time
* add changelog
* fix issue with model not reloading on href-to previously tried to fix after upgrade.
* replace with normalizednamepsace and setup for testing
* add the same functionality to the switch namespace link
* meep, wrong branch
* wow it's friday, correct branch
* add changelog for upgrade, didn't do earlier.
* another friday move
* correct change to changelog for ember upgrade
* remove and make another pr
* remove href-to dep and add comment
* Update ember-cli to ~3.20
* Remove bad optional-feature
* Remove ember-fetch dep
* re-install ember-fetch
* update model fragments pr
* update ember model fragments correct package name
* update ember composable helpers to solve array helper error
* update ember-concurrency
* add back engine dependencies, automatically removed during ember-cli-upgrade
* make author-form-options component js file otherwise error
* for now comment out withTestWaiter
* add eslint-node and fix if not with unless in templates
* fix linting for tab index of false is now -1 and add type button to all buttons without types
* fix href errors for linting, likely have to come back and fix
* using eslint fix flag to fix all this.gets
* ember modules codemode removed files that had module twice, will fix in next commit
* finish codemode ember-data-codemod needed to rename const model
* more this.get removal codemode did not work
* cont. removal of this.get
* stop mixin rules until figure out how to reconfig them all
* smaller eslint ignores
* get codemode
* testing app small fixes to bring it back after all the changes
* small changes to eslint
* test removal of getProperties
* fix issue with baseKey because value could be unknown needed to add a question mark in nested get
* smaller linting fixes
* get nested fixes
* small linting error fixes
* small linting changes
* working through more small linting changes
* another round of linting modifications
* liniting fixes
* ember module codemod
* quinit dom codemod
* angle bracket codemod
* discovered that components must have js files
* ran all codemods this is all that's left
* small changes to fix get needs two object, should not have been using get.
* fix issue with one input in form field
* fun times with set and onChange from oninput
* fix issue with model not being passed through on secret-edit-display
* fix issue with yarn run test not working, revert without npm run all
* linting and small fix when loading without a selectAuthBackend
* fix failing test with ui-wizard issue
* fix test failure due to model not being asked for correctly with new changes, probably run into this more.
* fix issue with component helper and at props specific to wizard
* rename log to clilog due to conflict with new eslint rule
* small changes for test failures
* component helper at fixes
* Revert to old component style something with new one broke this and can't figure it out for now
* small fishy smelling test fixes will revisit
* small test changes
* more small test changes, appears upgrade treats spaces differently
* comment out code and test that no longer seems relevant but confirm
* clean run on component test though still some potential timing issues on ui-console test
* fixing one auth test issue and timing issue on enable-test
* small mods
* fix this conditional check from upgrade
* linting fixes after master merge
* package updates using yarn upgrade-interactive
* update libraries that did not effect any of the test failures.
* update ember truth helpers library
* settling tests
* Fix ui-panel control group output
* fix features selection test failures
* Fix auth tests (x-vault-token)
* fix shared test
* fix issue with data null on backend
* Revert "Fix auth tests (x-vault-token)"
This reverts commit 89cb174b2f1998efa56d9604d14131415ae65d6f.
* Fix auth tests (x-vault-token) without updating this.set
* Update redirect-to tests
* fix wrapped token test
* skip some flaky test
* fix issue with href and a tags vs buttons
* fix linting
* updates to get tests running (#10409)
* yarn isntall
* increasing resource_class
* whoops
* trying large
* back to xlarge
* Fix param issue on transform item routes
* test fixes
* settle on policies (old) test
* fix browserstack test warning and skips of test confirmed worked
* Fix redirect-to test
* skips
* fix transformation test and skip some kmip
* Skip tests
* Add meep marker to remaining failing tests
* Skip test with failing component
* rever skip on secret-create test
* Skip piece of test that fails due to navigation-input
* fix settings test where can and skip in others after confirming
* fix circle ci test failures
* ssh role settle
* Fix navigate-input and add settled to test
* Remove extra import
* secret cubbyhole and alicloud
* Add settled to gcpkms test
* settles on redirect to test
* Bump browserstack test resource to large
* Update browserstack resource size to xlarge
* update todos
* add back in withTestWaiter
* try and fix credentials conditional action added comment instead
* Update volatile computed properies to get functions
* this step was never reached and we never defined secretType anywhere so I removed
* add settled to policy old test
* Fix navigate-input on policies and leases
* replace ssh test with no var hoping that helps and add settled to other failing tests, unskip console tests
* kmip, transit, role test remove a skip and add in settled
* fix hover copy button, had to remove some testing functionality
* Remove private router service
* remove skip on control ssh and ui panel, fix search select by restructuring how to read the error
* final bit of working through skipped test
* Replace clearNonGlobalModels by linking directly to namespace with href-to
* Remove unused var
* Fix role-ssh id bug by updating form-field-from-model to form-field-group-loop
* Fix transit create id would not update
* Update option toggle selector for ssh-role
* Fix ssh selector
* cleanup pt1
* small clean up
* cleanup part2
* Fix computed on pricing-metrics-form
* small cleanup based on chelseas comments.
Co-authored-by: Chelsea Shaw <chelshaw.dev@gmail.com>
Co-authored-by: Sarah Thompson <sthompson@hashicorp.com>
* wip -- add modal component using ember-wormhole, add static content but still need to enable onClose
* add onClose to modal
* WIP
* add copy and close button
* add copy and close button
* and copy and close button to modal
* use modal on each key action page
* make text copied text more generic
* update datakey textareas to codemirror
* only show user input on encrypt and decrypt
* only show user input on all key actions
* separate copy ciphertext, plaintext, and close button on datakey modal
* style ciphertext and plaintext as code
* only show separate copy buttons on datakey modal if both outputs are shown
* update modal styling
* style modal
* add descriptions to each key action
* remove conditional from hmac modal since we only ever show hmac output
* add modal for export key action
* make output scroll horizontally with copy button next to it
* make output scroll horizontally with copy button next to it
* escape & in copy and close button, format text output so it scrolls horizontally
* fix formatting of key action descriptions
* Ui/add transit modal tests (#8523)
* Fix tests for updated transit with modals workflow
* WIP // remove box shadow from key actions descriptions
* WIP // flash messages on successful action match mocks
* WIP // remove ciphertext view after datakey created
* WIP // make flash messages when copy & closing less generic, and match copy flash message
* WIP // Optionally show close button on modal, with tests
* remove unused deps from modal test
* WIP // Fix verify modal styling and content
* Add modal for sign action
* Fix output of non-wrapped export key
* Fix output of non-wrapped export key
* Add description to JSDOCS about modal component
* Add help text about plaintext encoded in base64
* add flash msgs for datakey and export
* flash success msg when closing modal on export page
* clarify sign success msg
* address PR feedback
* add indentation for export key json
* Fix modal tests pt 2
* Remove decode after decrypt in transit tests
Co-authored-by: Chelsea Shaw <chelshaw.dev@gmail.com>
* add placeholder for Key actions tab
* navigate to key items by default
* add placeholder key actions list page
* remove extra whitespace from component blueprint
* add SelectableCard
* move key actions from side nav to top nav
* make tabs active
* remove toolbar from key actions pages
* add divs to link to each key action on key actions page
* move preview-head to gitignore
* use selectable card css
* remove key actions
* use css grid
* update selectable card styling
* update Key Actions page header
* make cards clickable
* refactor supportedActions to include glyph
* make header black on hover
* rename selectable-card transit card and update styling
* add description and glyph for other key types
* use human readable titles for key action names
* update tests; still need to fix failing ones
* use datakey instead of data-key
* fix some failing tests
* fix more tests
* remove extra chevron from rotate button
* remove whitespace
* remove pauseTest
* use rename export to export key in the template instead of the model
* fix last few failing tests
* WIP
* link to key actions page by default
* test for transit action title
* only add query params when viewing a transit secret
* update structure icons
* add missing structure icons
* resolve merge conflicts from rebase
* use filter and map for supported actions
* only add query params for transit secrets
* add storage route
* template out the routes and new raft storage overview
* fetch raft config and add new server model
* pngcrush the favicon
* add view components and binary-file component
* add form-save-buttons component
* adjust rawRequest so that it can send a request body and returns the response on errors
* hook up restore
* rename binary-file to file-to-array-buffer
* add ember-service-worker
* use forked version of ember-service-worker for now
* scope the service worker to a single endpoint
* show both download buttons for now
* add service worker download with a fallback to JS in-mem download
* add remove peer functionality
* lint go file
* add storage-type to the cluster and node models
* update edit for to take a cancel action
* separate out a css table styles to be used by http-requests-table and on the raft-overview component
* add raft-join adapter, model, component and use on the init page
* fix styling and gate the menu item on the cluster using raft storage
* style tweaks to the raft-join component
* fix linting
* add form-save-buttons component to storybook
* add cancel functionality for backup uploads, and add a success message for successful uploads
* add component tests
* add filesize.js
* add filesize and modified date to file-to-array-buffer
* fix linting
* fix server section showing in the cluster nav
* don't use babel transforms in service worker lib because we don't want 2 copies of babel polyfill
* add file-to-array-buffer to storybook
* add comments and use removeObjectURL to raft-storage-overview
* update alert-banner markdown
* messaging change for upload alert banner
* Update ui/app/templates/components/raft-storage-restore.hbs
Co-Authored-By: Joshua Ogle <joshua@joshuaogle.com>
* more comments
* actually render the label if passed and update stories with knobs
* be more specific about node version, and specify a yarn version
* update ember, ember-cli, ember-data, ember-data-model-fragments
* use router handlers to access transition information
* fix shadowing of component helper
* update ivy-codemirror, ember-cli-inject-live-reload
* remove custom router service
* don't use transition.queryParams
* update ember-cli-deprecation-workflow
* refactor kv v1 to use 'path' instead of 'id' on creation
* fix auth-jwt-test and toolbar-link-test
* update ember composable helpers
* remove Ember.copy from test file
* no more deprecations in the workflow
* fix more secret tests
* fix remaining failed tests
* move select component to core because it's used by ttl-picker
* generate new model class for each test instead of reusing an existing one
* fix selectors on kmip tests
* refactor how control groups construct urls from the new transition objects
* add router service override back in, and have it be evented so that we can trigger router events on it
* move stories and markdown files to core if the component lives in core
* update ember-cli, ember-cli-babel, ember-auto-import
* update base64js, date-fns, deepmerge, codemirror, broccoli-asset-rev
* update linting rules
* fix test selectors
* update ember-api-actions, ember-concurrency, ember-load-initializers, escape-string-regexp, normalize.css, prettier-eslint-cli, jsdoc-to-markdown
* remove test-results dir
* update base64js, ember-cli-clipboard, ember-cli-sass, ember-cli-string-helpers, ember-cli-template-lint, ember-cli-uglify, ember-link-action
* fix linting
* run yarn install without restoring from cache
* refactor how tests are run and handle the vault server subprocess
* update makefile for new test task names
* update circle config to use the new yarn task
* fix writing the seal keys when starting the dev server
* remove optional deps from the lockfile
* don't ignore-optional on yarn install
* remove errant console.log
* update ember-basic-dropdown-hover, jsonlint, yargs-parser
* update ember-cli-flash
* add back optionalDeps
* update @babel/core@7.5.5, ember-basic-dropdown@1.1.3, eslint-plugin-ember@6.8.2
* update storybook to the latest release
* add a babel config with targets so that the ember babel plugin works properly
* update ember-resolver, move ember-cli-storybook to devDependencies
* revert normalize.css upgrade
* silence fetchadapter warning for now
* exclude 3rd party array helper now that ember includes one
* fix switch and entity lookup styling
* only add -root suffix if it's not in versions mode
* make sure drop always has an array on the aws role form
* fix labels like we did with the backport
* update eslintignore
* update the yarn version in the docker build file
* update eslint ignore
* add shell quote
* use shell quote's parse method to properly escape strings entered in the web cli
* add and update tests for the web CLI
* fix linting and skip test for ' in a path
* skip the correct test
* switch to dynamic imports so that bundling doesn't include swagger-ui-dist in its vendor file
* remove ember-ajax
* delete comment
* update comment about lazy loading in the engine index.js
* init dropdown
* add dropdown to storybook
* move http requests components into container
* add event handler for selecting new time window
* no need for this. in the template
* filter bar chart and table
* add bar chart transitions
* handle Last 12 Months in dropdown
* don't use fake data
* start tests
* add jsdoc and notes for storybook
* add container to storybook
* compute filteredCounters when counters change
* move static dropdown options to template
* add tests
* style the dropdown
* use this.elementId
* fix linting errors
* use ember array extensions
* use fillIn instead of page object and make dom assertions consistent
* calculate the correct percent change between months
* use data-test selector instead of id
* show plus or minus next to percent change
* open-api-explorer engine with embedded swagger-ui
* move swagger config to a component, rely directly on swagger-ui
* filter operations by endpoint, hook up filter to query param, add namespace handling
* fix namespace handling
* update ember-engines so that we can app.import in a lazy engine
* use engine's included hook to move swagger-ui to engine-vendor.* files
* show flash message about this being a live vault server
* show a namespace reminder and override some styles from swagger-ui
* switch filter to use includes instead of startsWith
* move flash-message to alert-banner and fix namespace reminder with a block
* adds explore web-cli command to navigate to the api-explorer engine
* allow passing a preformatted string to flash messages
* add multi-line flash-message to api explorer
* invert control and trigger events on react app so we can control the layout more and use our components
* tweak styling some more and adjust message on the flash
* change web cli command from 'explore' to 'api'
* shorten namespace warning
* fix console
* fix comments
* initialize tooltip
* style tooltip
* show date in tooltip
* show tooltip on hover
* style tooltip
* add hover padding for when bar is very short
* add tooltip test and format tooltip date
* revert to using real data
* update comment about binding the tooltip to shadowBars
* remove d3array
* use double colons for pseudo elements
* use elementId in bars-container id name to prevent clashing
* use Object.freeze to eliminate linting error
* add kmip engine
* adjust where kmip engine is mounted and sketch out routes
* add secret mount path service to share params to engines
* move list-controller and list-route mixins to core addon and adjust imports
* properly link kmip secrets from the secrets list page
* tweak routes and add list controllers
* stub out some models and adapters
* fix mixin exports
* move a bunch of components into the core addon
* use new empty yield in list-view in the namespace template
* scopes list using list-view and list-item components
* simplify and flatten routes, templates for all of the list pages
* role show route and template and scope create template
* add ember-router-helpers
* add more packages to the dependencies of the core addon
* add field-group-show component for listing fields from a model
* move more components to the shared addon
* make configure and configuration routes work and save a generated model
* save and list scopes
* role create, list, read
* list credentials properly
* move allowed attributes to field group
* show allowed operations on role details page
* add kmip logo to mount secrets engine list page
* add role edit page
* show all model attributes on role show page
* enable role edit
* fix newFields error by creating open api role model on the role list route
* only show selected fields on role edit page
* do not send scope and backend attrs to api
* move path-or-array to core addon
* move string-list component to core addon
* remove extra top border when there is only one field group
* add icons for all of the list pages
* update kmip config model so defaultValue doesn't error
* generate credentials
* credential create and show
* only show kmip when feature is enabled
* fix saving of TTL fields generated from Open API
* move masked-input and list-pagination components to core addon
* add param on edit form to allow for calling onSave after render happens
* polish credential show page and redirect there after generating credentials
* add externalLink for kmip engine
* add kmip-breadcrumb component
* use kmip-breadcrumb component
* add linkPrefix param to linked-block component to allow for routing programmatically inside an engine
* redirect to the right place when enabling kmip
* fix linting
* review feedback
* update signature for path-help usage
* fix ttl field expansion test
* remove role filed from role form, fix generate redirect
* remove field-group-show because it's in the core addon
* remove bottom rule from show pages
* fix Max TTL displayAttrs for ssh role
* update edit-form to take fields or attrs
* fix linting
* remove listenAddrs and set default val on ttl if a val is passed in
* add no-jquery rule and move event listeners to ember-concurrency tasks
* remove unnecessary onchange and handleKeyDown actions
* add element.closest polyfill and convert linked-block to use native dom apis
* update pretender, fetch, page-object, add optional-features, remove ember/jquery
* turn off jquery inclusion
* remove jQuery.isPlainObject usage
* violatedDirective isn't always formatted the same
* use fetch and the ember-fetch adapter mixin
* move to fetch and lowercase headers for pretender
* display non-ember-data errors
* use new async fn test style and lowercase headers in auth service test
* setContext is not necessary with the new style tests and ember-cli-page-object - it actually triggers jquery usage
* update ember-fetch, ember-cli-pretender
* wait for permissions check
* lowercase header name in auth test
* refactor transit tests to one test per key type
* simplify pollCluster helper
* stop flakey tests by prefering the native fetch
* avoid uncaught TransitionAborted error by navigating directly to unseal
* unset model on controller after unloading it because controllers are singletons
* update yarn.lock
* Add http request volume table (#6765)
* init http metrics page
* remove flex-table-column
* add http requests table
* calculate percent change between each counter
* start percent change tests
* style request table
* show percent more/less glyph
* add percent more less tests
* add inline alert about recorded metrics
* make arrows diagonal
* remove conditional inside countersWithChange
* add better error msg
* use tagName and wrapping element a la glimmer components
* extend ClusterRouteBase so auth and seal checks happen
* make table accessible
* remove curlies
* add HttpRequestsTable to storybook
* make table accessible
* use qunit dom for better assertions
* remove EmptyState since we will never have 0 requests
* ensure counters is set in test context
* Http request volume/add barchart (#6814)
* Add http request volume table (#6765)
* init http metrics page
* remove flex-table-column
* add http requests table
* calculate percent change between each counter
* start percent change tests
* style request table
* show percent more/less glyph
* add percent more less tests
* add inline alert about recorded metrics
* make arrows diagonal
* remove conditional inside countersWithChange
* add better error msg
* use tagName and wrapping element a la glimmer components
* extend ClusterRouteBase so auth and seal checks happen
* make table accessible
* remove curlies
* add HttpRequestsTable to storybook
* make table accessible
* use qunit dom for better assertions
* remove EmptyState since we will never have 0 requests
* ensure counters is set in test context
* add http-requests-bar-chart
* add HttpRequestsBarChart tests
* add HttpRequestsBarChart to Storybook
* format total number of requests according to locale
* do not show extra minus sign when percent change is negative
* add link to request metrics in status bar menu
* only show bar chart if we have data for more than 1 month
* make ticks lighter
* ensure charts show data for correct month
* make example counters response look like the adapter response instead of the raw api response
* ensure ui shows the same utc date as the api response
* add format-utc tests
* downgrade to d3 v4 to support ie11
* add gridlines
* move dasharray to css
* use scheduleOnce instead of debounce to prevent multiple re-renders
* add key function to bars
* add exit case when data is no longer in parsedCounters
* fix timestamp in table test
* fix timestamps
* use utcParse and fallback to isoParse for non-UTC dates
* fix bar chart tests
* ci: break config into separate files
* Untangle githooks
* githooks: fix whitespace
* .hooks/pre-commit: add ui -> lint-staged check
- We no longer require dependency on husky with this change.
* ui: remove husky dependency and config
- The previous commit obviates the need for it.
- We will now have to manage these hooks by hand, but this removes
the conflict between husky-installed hooks and those in the .hooks dir.
* ui: update yarn.lock with husky removed
* .hooks/pre-commit: always use subshell + docs
- Always use subshell means we consistently exit from the
same place which feels less complex.
- Docs are necessary for horrible bash like this I think...
* Makefile: remove old husky githooks
- Husky has installed a handler for every single git hook.
- This causes warnings on every git operation.
- Eventually we can remove this, but better not to confuse
people with these messages for now.
* ci: fix go build tags
* Makefile: improve compatibility of rm call
- Looks like the xargs in Travis does something different to the one
on my mac, this more verbose call should be safe everywhere.
* ci: fix make target names
* ci: fix test-ui invocation
* Makefile: simplify husky hook cleanup
* ci: more focussed readme
* use ember-power-select-with-create instead of ember-power-select
* add custom Add message to clarify whether you need a name or ID
* add search-select to storybook
* add wormhole div for ember-basic-dropdown
* add search-select to storybook
* make sure knobs are working
* remove unused code
* upgrade yargs-parser for better quote handling
* remove encoding pre&post parse, and remove wrapping quotes when pushing to data array
* add test for spaces and strings
* base64 encode policy strings in tests where we're using them with string interpolation
* improve regex to only remove wrapping single and double quotes
* don't support quotes in paths in the web cli
* add browserstack
* check for data before removing root token
* fix root prefix and select by attributes for ie11
* use objectAt for ie11
* use blobs instead of files for ie11
* manually round cirucmference for ie11
* skip csp test on ie11
* skip tests in ie11
* include polyfill for CI
* remove on exit hooks
* update which browserstack tests are run
* remove ie check since we are not running these tests in ie
* remove ie check since we are not running these tests in ie
* add ember-cli-deprecation-workflow
* this._router in routes to quiet deprecation
* mark style bindings as htmlSafe strings
* simplify authenticate service hook with async fn
* don't serialize aliases relationship on entities
* update ember-test-selectors so we can use supportsDataTestProperties
* allow duplicate flash messages because we don't want a log warning
* update ember-concurrency for better error message
* use ember-qunit instead of ember-cli-qunit
* update ember-cli-page-object so we're not using a beta lol
* ignore test-helper jquery context warning
* fix race condition in pgp-file test by using ember-concurrency task and test waiter
* await cli commands
* fail tests if async leakage is detected
* update auth-jwt component and tests to be simpler
* fix linting
* review feedback