diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 1e0df9e..7b91a4c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,6 +1,6 @@ --- name: Bug Report -about: Report a bug in SSOmatic +about: Report a bug in awssesh title: "[bug] " labels: bug --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 503e23c..6f07d55 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,109 +1,109 @@ -## [1.3.0](https://github.com/tux86/ssomatic/compare/v1.2.3...v1.3.0) (2026-06-11) +## [1.3.0](https://github.com/tux86/awssesh/compare/v1.2.3...v1.3.0) (2026-06-11) ### ⚠ BREAKING CHANGES * the web UI is removed and Homebrew/binary distribution is -replaced by npm (npx ssomatic / npm i -g ssomatic). +replaced by npm (npx awssesh / npm i -g awssesh). ### Features -* distribute as a CLI-only npm package ([5307746](https://github.com/tux86/ssomatic/commit/5307746d89817027319176b4da3fd7a60f6599c7)) +* distribute as a CLI-only npm package ([5307746](https://github.com/tux86/awssesh/commit/5307746d89817027319176b4da3fd7a60f6599c7)) ### Refactoring -* **aws:** replace Bun APIs with node:fs/promises and node:child_process ([ffcc9c0](https://github.com/tux86/ssomatic/commit/ffcc9c03f57059a9f146f3d0e999dde64e2c6fdf)) -* **cli:** remove web UI layer and toolchain ([d6f3f53](https://github.com/tux86/ssomatic/commit/d6f3f53eb374f656bf2e3d8b11b55117eaa86bdb)) -* drop dead web eslint block, fix CONTRIBUTING, harden ~/.aws writes ([b15cb3c](https://github.com/tux86/ssomatic/commit/b15cb3c01dc8de09f6dc9ae591d465af0101dcdf)) +* **aws:** replace Bun APIs with node:fs/promises and node:child_process ([ffcc9c0](https://github.com/tux86/awssesh/commit/ffcc9c03f57059a9f146f3d0e999dde64e2c6fdf)) +* **cli:** remove web UI layer and toolchain ([d6f3f53](https://github.com/tux86/awssesh/commit/d6f3f53eb374f656bf2e3d8b11b55117eaa86bdb)) +* drop dead web eslint block, fix CONTRIBUTING, harden ~/.aws writes ([b15cb3c](https://github.com/tux86/awssesh/commit/b15cb3c01dc8de09f6dc9ae591d465af0101dcdf)) -## [1.4.0](https://github.com/tux86/ssomatic/compare/v1.3.1...v1.4.0) (2026-06-11) +## [1.4.0](https://github.com/tux86/awssesh/compare/v1.3.1...v1.4.0) (2026-06-11) ### Features -* **aws:** add console signin URL and export-block builders ([e41f80a](https://github.com/tux86/ssomatic/commit/e41f80aa7fa9793c76cf00a49c50e99cd6d4a66f)) -* **cli:** add daemon entry, detached spawn, and socket client ([5b4bfe9](https://github.com/tux86/ssomatic/commit/5b4bfe945c6b4687cf376fbfdaa93cae5195e98b)) -* **cli:** add daemon runtime paths and single-instance detection ([b496390](https://github.com/tux86/ssomatic/commit/b496390e145e2fcce16178a028008a3682157348)) -* **cli:** add daemon wire protocol and ndjson codec ([673f595](https://github.com/tux86/ssomatic/commit/673f595a7b1ca3d90af87e56d9b3186a4dfe2817)) -* **cli:** add expiry-aware scheduler decision ([255a33d](https://github.com/tux86/ssomatic/commit/255a33d29af5e2948adb6092e00a26a2cb7af531)) -* **cli:** add fire-gradient ASCII wordmark header ([c0d4b0b](https://github.com/tux86/ssomatic/commit/c0d4b0b8e1b7743c370fed06b008be464a1dfc02)) -* **cli:** add list-first dashboard component ([5575ff6](https://github.com/tux86/ssomatic/commit/5575ff627879e824f7f50b69eb5a4ad0ccbcc2a8)) -* **cli:** add status, export, refresh, and daemon subcommands ([fd1d262](https://github.com/tux86/ssomatic/commit/fd1d26213fa83d3887ca97d9f110f57d379dc593)) -* **cli:** add unix-socket daemon server with subscribe/snapshot/refresh ([641d33d](https://github.com/tux86/ssomatic/commit/641d33d59a62b2ed961b2baf74658b04656154a0)) -* **cli:** add useDaemon hook for live socket state ([9547310](https://github.com/tux86/ssomatic/commit/9547310da881fb97bb2b765f26af1bac0ade24fb)) -* **cli:** redesign dashboard — highlight cursor, auto-refresh (a/⟳), headers ([7304490](https://github.com/tux86/ssomatic/commit/73044908889cb70fc12b5229b2e4bb2a7f65e25a)) -* **cli:** redesign TUI — list-first dashboard + in-process auto-refresh ([cc0179c](https://github.com/tux86/ssomatic/commit/cc0179c7fa62f776fef8666448b80ad700f05a4b)) -* **cli:** replace menu UI with list-first dashboard, details, and settings ([afc4a77](https://github.com/tux86/ssomatic/commit/afc4a7768ff65eeca18614878590090ab513ac53)) -* **cli:** route argv to subcommands, daemon, or TUI ([6f94800](https://github.com/tux86/ssomatic/commit/6f948006486b47869618038fb2ca587523e5b9d3)) +* **aws:** add console signin URL and export-block builders ([e41f80a](https://github.com/tux86/awssesh/commit/e41f80aa7fa9793c76cf00a49c50e99cd6d4a66f)) +* **cli:** add daemon entry, detached spawn, and socket client ([5b4bfe9](https://github.com/tux86/awssesh/commit/5b4bfe945c6b4687cf376fbfdaa93cae5195e98b)) +* **cli:** add daemon runtime paths and single-instance detection ([b496390](https://github.com/tux86/awssesh/commit/b496390e145e2fcce16178a028008a3682157348)) +* **cli:** add daemon wire protocol and ndjson codec ([673f595](https://github.com/tux86/awssesh/commit/673f595a7b1ca3d90af87e56d9b3186a4dfe2817)) +* **cli:** add expiry-aware scheduler decision ([255a33d](https://github.com/tux86/awssesh/commit/255a33d29af5e2948adb6092e00a26a2cb7af531)) +* **cli:** add fire-gradient ASCII wordmark header ([c0d4b0b](https://github.com/tux86/awssesh/commit/c0d4b0b8e1b7743c370fed06b008be464a1dfc02)) +* **cli:** add list-first dashboard component ([5575ff6](https://github.com/tux86/awssesh/commit/5575ff627879e824f7f50b69eb5a4ad0ccbcc2a8)) +* **cli:** add status, export, refresh, and daemon subcommands ([fd1d262](https://github.com/tux86/awssesh/commit/fd1d26213fa83d3887ca97d9f110f57d379dc593)) +* **cli:** add unix-socket daemon server with subscribe/snapshot/refresh ([641d33d](https://github.com/tux86/awssesh/commit/641d33d59a62b2ed961b2baf74658b04656154a0)) +* **cli:** add useDaemon hook for live socket state ([9547310](https://github.com/tux86/awssesh/commit/9547310da881fb97bb2b765f26af1bac0ade24fb)) +* **cli:** redesign dashboard — highlight cursor, auto-refresh (a/⟳), headers ([7304490](https://github.com/tux86/awssesh/commit/73044908889cb70fc12b5229b2e4bb2a7f65e25a)) +* **cli:** redesign TUI — list-first dashboard + in-process auto-refresh ([cc0179c](https://github.com/tux86/awssesh/commit/cc0179c7fa62f776fef8666448b80ad700f05a4b)) +* **cli:** replace menu UI with list-first dashboard, details, and settings ([afc4a77](https://github.com/tux86/awssesh/commit/afc4a7768ff65eeca18614878590090ab513ac53)) +* **cli:** route argv to subcommands, daemon, or TUI ([6f94800](https://github.com/tux86/awssesh/commit/6f948006486b47869618038fb2ca587523e5b9d3)) ### Bug Fixes -* **cli:** close daemon log fd, guard cred expiry fallback, reset notify on manual refresh ([6b864c6](https://github.com/tux86/ssomatic/commit/6b864c6b79bbb8eaaf42e82b1257524e0a6081b2)) -* **cli:** destroy all daemon connections on stop and surface handler errors ([b8a23f8](https://github.com/tux86/ssomatic/commit/b8a23f858a628a5c350343bf5b8cd6019b78a6f9)) -* **cli:** harmonize shortcut footers across screens and make q quit on login/settings/details ([bcb9106](https://github.com/tux86/ssomatic/commit/bcb910691220c59c5a8c2099f01f6b7f2909ee01)) -* **cli:** harmonize shortcut footers; Esc=back on sub-screens, q quits at home only ([62748e0](https://github.com/tux86/ssomatic/commit/62748e0f25550575e6044be6dbfe158b0ba21170)) -* **cli:** make daemon refresh expiry-aware via role-credential expiry ([a105d8e](https://github.com/tux86/ssomatic/commit/a105d8e2711f6ed2d31efa3a1f8bc20243b23724)) -* **cli:** make dashboard footer keys stand out and tie a to the auto-refresh marker ([648ef6e](https://github.com/tux86/ssomatic/commit/648ef6ece058d4ee8b18d6f7f132130250d3fcd1)) -* **cli:** reply to refresh/setFavorite requests, harden socket, prompt stop ([5962e77](https://github.com/tux86/ssomatic/commit/5962e778c2985a879d261936dc11d0032fefd14a)) -* **cli:** stop global q-quit from firing during filter typing; surface device-auth init failure ([dbda704](https://github.com/tux86/ssomatic/commit/dbda7045ac30b71a7b3b0055c80b32bd5965158a)) +* **cli:** close daemon log fd, guard cred expiry fallback, reset notify on manual refresh ([6b864c6](https://github.com/tux86/awssesh/commit/6b864c6b79bbb8eaaf42e82b1257524e0a6081b2)) +* **cli:** destroy all daemon connections on stop and surface handler errors ([b8a23f8](https://github.com/tux86/awssesh/commit/b8a23f858a628a5c350343bf5b8cd6019b78a6f9)) +* **cli:** harmonize shortcut footers across screens and make q quit on login/settings/details ([bcb9106](https://github.com/tux86/awssesh/commit/bcb910691220c59c5a8c2099f01f6b7f2909ee01)) +* **cli:** harmonize shortcut footers; Esc=back on sub-screens, q quits at home only ([62748e0](https://github.com/tux86/awssesh/commit/62748e0f25550575e6044be6dbfe158b0ba21170)) +* **cli:** make daemon refresh expiry-aware via role-credential expiry ([a105d8e](https://github.com/tux86/awssesh/commit/a105d8e2711f6ed2d31efa3a1f8bc20243b23724)) +* **cli:** make dashboard footer keys stand out and tie a to the auto-refresh marker ([648ef6e](https://github.com/tux86/awssesh/commit/648ef6ece058d4ee8b18d6f7f132130250d3fcd1)) +* **cli:** reply to refresh/setFavorite requests, harden socket, prompt stop ([5962e77](https://github.com/tux86/awssesh/commit/5962e778c2985a879d261936dc11d0032fefd14a)) +* **cli:** stop global q-quit from firing during filter typing; surface device-auth init failure ([dbda704](https://github.com/tux86/awssesh/commit/dbda7045ac30b71a7b3b0055c80b32bd5965158a)) -## [1.3.1](https://github.com/tux86/ssomatic/compare/v1.3.0...v1.3.1) (2026-06-11) +## [1.3.1](https://github.com/tux86/awssesh/compare/v1.3.0...v1.3.1) (2026-06-11) ### Bug Fixes -* **cli:** restore action bar top margin when no status items ([7189bba](https://github.com/tux86/ssomatic/commit/7189bbaa66b2372437f77c2391ab23a239616f7e)) -* **cli:** restore action bar top margin when no status items ([8808ced](https://github.com/tux86/ssomatic/commit/8808ced9af9b144158f3e09828d5b8fe78bd5486)) +* **cli:** restore action bar top margin when no status items ([7189bba](https://github.com/tux86/awssesh/commit/7189bbaa66b2372437f77c2391ab23a239616f7e)) +* **cli:** restore action bar top margin when no status items ([8808ced](https://github.com/tux86/awssesh/commit/8808ced9af9b144158f3e09828d5b8fe78bd5486)) -## [1.2.3](https://github.com/tux86/ssomatic/compare/v1.2.2...v1.2.3) (2026-03-26) +## [1.2.3](https://github.com/tux86/awssesh/compare/v1.2.2...v1.2.3) (2026-03-26) ### Bug Fixes -* **ci:** checkout release tag for builds, use npx semantic-release like presto ([076e21c](https://github.com/tux86/ssomatic/commit/076e21c6291533c226cc03d0044729cf9e34f65b)) +* **ci:** checkout release tag for builds, use npx semantic-release like presto ([076e21c](https://github.com/tux86/awssesh/commit/076e21c6291533c226cc03d0044729cf9e34f65b)) -## [1.2.2](https://github.com/tux86/ssomatic/compare/v1.2.1...v1.2.2) (2026-03-26) +## [1.2.2](https://github.com/tux86/awssesh/compare/v1.2.1...v1.2.2) (2026-03-26) ### Bug Fixes -* **ci:** build binaries after version bump so version matches release ([1f15fd3](https://github.com/tux86/ssomatic/commit/1f15fd35d25091f351193bdd61727299949a7d0b)) +* **ci:** build binaries after version bump so version matches release ([1f15fd3](https://github.com/tux86/awssesh/commit/1f15fd35d25091f351193bdd61727299949a7d0b)) -## [1.2.1](https://github.com/tux86/ssomatic/compare/v1.2.0...v1.2.1) (2026-03-26) +## [1.2.1](https://github.com/tux86/awssesh/compare/v1.2.0...v1.2.1) (2026-03-26) ### Bug Fixes -* **cli:** separate status bar and action bar with individual dividers ([ddc19ae](https://github.com/tux86/ssomatic/commit/ddc19ae9efe20ed279b7c4a359a6241ef066541f)) +* **cli:** separate status bar and action bar with individual dividers ([ddc19ae](https://github.com/tux86/awssesh/commit/ddc19ae9efe20ed279b7c4a359a6241ef066541f)) -## [1.2.0](https://github.com/tux86/ssomatic/compare/v1.1.1...v1.2.0) (2026-03-26) +## [1.2.0](https://github.com/tux86/awssesh/compare/v1.1.1...v1.2.0) (2026-03-26) ### Features -* embed web assets in binary, add --version flag, fix dev workflow ([92b9a83](https://github.com/tux86/ssomatic/commit/92b9a83e33e1e913ac4ed9e2ea6a43437c19ac57)) -* show version and update notification in CLI and web UI ([264b16d](https://github.com/tux86/ssomatic/commit/264b16d621d74290f61a09d64fb32f7677b6d2fa)) +* embed web assets in binary, add --version flag, fix dev workflow ([92b9a83](https://github.com/tux86/awssesh/commit/92b9a83e33e1e913ac4ed9e2ea6a43437c19ac57)) +* show version and update notification in CLI and web UI ([264b16d](https://github.com/tux86/awssesh/commit/264b16d621d74290f61a09d64fb32f7677b6d2fa)) ### Bug Fixes -* **ci:** remove redundant syntax check step ([ba0300c](https://github.com/tux86/ssomatic/commit/ba0300c1e2c69d091937a968f45a32fb2c7345c5)) +* **ci:** remove redundant syntax check step ([ba0300c](https://github.com/tux86/awssesh/commit/ba0300c1e2c69d091937a968f45a32fb2c7345c5)) -## [1.1.1](https://github.com/tux86/ssomatic/compare/v1.1.0...v1.1.1) (2026-03-26) +## [1.1.1](https://github.com/tux86/awssesh/compare/v1.1.0...v1.1.1) (2026-03-26) ### Bug Fixes -* handle port-in-use gracefully instead of crashing ([237aacd](https://github.com/tux86/ssomatic/commit/237aacd1b4ab314dfb8d5b7533efeecf16fdd214)) +* handle port-in-use gracefully instead of crashing ([237aacd](https://github.com/tux86/awssesh/commit/237aacd1b4ab314dfb8d5b7533efeecf16fdd214)) -## [1.1.0](https://github.com/tux86/ssomatic/compare/v1.0.1...v1.1.0) (2026-03-26) +## [1.1.0](https://github.com/tux86/awssesh/compare/v1.0.1...v1.1.0) (2026-03-26) ### Features -* add Homebrew tap with auto-update on release ([8e9adfe](https://github.com/tux86/ssomatic/commit/8e9adfe822a2742901e80fbdb0d91831ccaac098)) +* add Homebrew tap with auto-update on release ([8e9adfe](https://github.com/tux86/awssesh/commit/8e9adfe822a2742901e80fbdb0d91831ccaac098)) -## [1.0.1](https://github.com/tux86/ssomatic/compare/v1.0.0...v1.0.1) (2026-03-26) +## [1.0.1](https://github.com/tux86/awssesh/compare/v1.0.0...v1.0.1) (2026-03-26) ### Bug Fixes -* **cli:** replace any with unknown in list component interfaces ([372fafa](https://github.com/tux86/ssomatic/commit/372fafa0955435d4e4dd084393992f28e5ec9714)) +* **cli:** replace any with unknown in list component interfaces ([372fafa](https://github.com/tux86/awssesh/commit/372fafa0955435d4e4dd084393992f28e5ec9714)) ## 1.0.0 (2026-03-26) ### Features -* initial release — AWS SSO credential manager with CLI and web UI ([315be57](https://github.com/tux86/ssomatic/commit/315be570f7f60de7318b0b2d1b2caac2ac5ff453)) +* initial release — AWS SSO credential manager with CLI and web UI ([315be57](https://github.com/tux86/awssesh/commit/315be570f7f60de7318b0b2d1b2caac2ac5ff453)) diff --git a/CLAUDE.md b/CLAUDE.md index 223e34c..1709da2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,16 +2,16 @@ ## Project Overview -**SSOmatic** — Interactive AWS SSO credential manager — a terminal CLI built with Bun + React + Ink. +**awssesh** — Interactive AWS SSO credential manager — a terminal CLI built with Bun + React + Ink. -Distributed via npm (`npx ssomatic`). Settings (favorites, notifications, refresh interval) are persisted across sessions. +Distributed via npm (`npx awssesh`). Settings (favorites, notifications, refresh interval) are persisted across sessions. -SSOmatic is a single-process TUI. While open it auto-refreshes the ⟳ (pinned) profiles' role credentials in an expiry-aware manner, and sends a desktop notification when an interactive SSO browser login is needed. No background process — quitting fully exits. +awssesh is a single-process TUI. While open it auto-refreshes the ⟳ (pinned) profiles' role credentials in an expiry-aware manner, and sends a desktop notification when an interactive SSO browser login is needed. No background process — quitting fully exits. ## Structure ``` -ssomatic/ +awssesh/ ├── src/ │ ├── aws/ # Shared AWS logic (UI-agnostic) │ │ ├── sso.ts # SSO profiles, tokens, refresh @@ -30,10 +30,10 @@ ssomatic/ │ ├── args.ts # CLI argument parsing │ ├── args.test.ts │ ├── commands/ # Non-TUI subcommands -│ │ ├── status.ts # `ssomatic status` +│ │ ├── status.ts # `awssesh status` │ │ ├── status.test.ts -│ │ ├── export.ts # `ssomatic export ` -│ │ └── refresh.ts # `ssomatic refresh [profile]` +│ │ ├── export.ts # `awssesh export ` +│ │ └── refresh.ts # `awssesh refresh [profile]` │ ├── tui/ # TUI screens │ │ ├── Dashboard.tsx # Main profile list view │ │ ├── Details.tsx # Profile detail view @@ -81,11 +81,11 @@ bun test # Run unit tests ### Runtime CLI subcommands ```bash -ssomatic # Launch the interactive TUI -ssomatic status # Print profile statuses and exit -ssomatic refresh [profile] # Refresh a profile (or all favorites) now -ssomatic export # Print export AWS_* lines (use with eval $(ssomatic export )) -ssomatic --version +awssesh # Launch the interactive TUI +awssesh status # Print profile statuses and exit +awssesh refresh [profile] # Refresh a profile (or all favorites) now +awssesh export # Print export AWS_* lines (use with eval $(awssesh export )) +awssesh --version ``` ## Keyboard Shortcuts (Dashboard) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b754783..ecc017d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -# Contributing to SSOmatic +# Contributing to awssesh Thank you for your interest in contributing! This guide will help you get started. @@ -11,8 +11,8 @@ Thank you for your interest in contributing! This guide will help you get starte ## Development Setup ```bash -git clone https://github.com/tux86/ssomatic.git -cd ssomatic +git clone https://github.com/tux86/awssesh.git +cd awssesh bun install # Run the CLI from source @@ -31,7 +31,7 @@ bun test ## Project Structure ``` -ssomatic/ +awssesh/ ├── src/ │ ├── aws/ # AWS credential logic (sso.ts, aws.ts, utils.ts) + unit tests │ └── cli/ # Terminal UI (React/Ink) + entry point @@ -83,4 +83,4 @@ bun run build ## Questions? -Open an [issue](https://github.com/tux86/ssomatic/issues) or start a [discussion](https://github.com/tux86/ssomatic/discussions). +Open an [issue](https://github.com/tux86/awssesh/issues) or start a [discussion](https://github.com/tux86/awssesh/discussions). diff --git a/README.md b/README.md index 107f132..d7b529a 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,20 @@ -# SSOmatic +# awssesh Keep your AWS SSO credentials fresh — automatically. A fast terminal dashboard that auto-refreshes your pinned profiles while it's open. -[![npm version](https://img.shields.io/npm/v/ssomatic)](https://www.npmjs.com/package/ssomatic) -[![CI](https://github.com/tux86/ssomatic/actions/workflows/ci.yml/badge.svg)](https://github.com/tux86/ssomatic/actions/workflows/ci.yml) +[![npm version](https://img.shields.io/npm/v/awssesh)](https://www.npmjs.com/package/awssesh) +[![CI](https://github.com/tux86/awssesh/actions/workflows/ci.yml/badge.svg)](https://github.com/tux86/awssesh/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [![Bun](https://img.shields.io/badge/Bun-%23000000.svg?logo=bun&logoColor=white)](https://bun.sh) [![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) --- -## Why SSOmatic +## Why awssesh - **k9s-style list-first dashboard** — all your SSO profiles at a glance with live expiry countdowns; navigate with j/k or arrow keys, no menus to dig through. - **In-process auto-refresh for ⟳ pinned profiles** — pin a profile with `a` and expiry-aware refresh keeps its credentials ready before they expire, with no fixed-interval polling waste. -- **Notify-on-login, never surprise you** — when an interactive SSO login is required SSOmatic sends a desktop notification so you know to log in. +- **Notify-on-login, never surprise you** — when an interactive SSO login is required awssesh sends a desktop notification so you know to log in. - **One-keystroke everything** — copy `export AWS_*` vars, open the AWS console, copy the profile name, or force a refresh — all from the dashboard without leaving your terminal. - **Single process, clean exit** — quitting fully exits. No background processes to manage. @@ -23,7 +23,7 @@ Keep your AWS SSO credentials fresh — automatically. A fast terminal dashboard ## Demo

- SSOmatic CLI Demo + awssesh CLI Demo

--- @@ -32,11 +32,11 @@ Keep your AWS SSO credentials fresh — automatically. A fast terminal dashboard ```bash # Run without installing -npx ssomatic -bunx ssomatic +npx awssesh +bunx awssesh # Or install globally -npm install -g ssomatic +npm install -g awssesh ``` --- @@ -45,14 +45,14 @@ npm install -g ssomatic ```bash # 1. Launch the dashboard -ssomatic +awssesh # 2. Navigate to a profile and press 'a' to pin it for auto-refresh -# 3. SSOmatic auto-refreshes pinned profiles while the dashboard is open +# 3. awssesh auto-refreshes pinned profiles while the dashboard is open # 4. Press 'q' to quit when done ``` -While the dashboard is open, ⟳ pinned profiles are refreshed automatically when their credentials are close to expiry. When a browser login is required, you get a desktop notification and can log in directly from the TUI or with `ssomatic refresh `. +While the dashboard is open, ⟳ pinned profiles are refreshed automatically when their credentials are close to expiry. When a browser login is required, you get a desktop notification and can log in directly from the TUI or with `awssesh refresh `. --- @@ -60,16 +60,16 @@ While the dashboard is open, ⟳ pinned profiles are refreshed automatically whe | Command | Description | |---------|-------------| -| `ssomatic` | Launch the interactive TUI | -| `ssomatic status` | Print profile statuses and exit | -| `ssomatic refresh [name]` | Refresh a profile (or all favorites) now | -| `ssomatic export ` | Print `export AWS_*` lines for `eval $(...)` | -| `ssomatic --version` | Print version and exit | +| `awssesh` | Launch the interactive TUI | +| `awssesh status` | Print profile statuses and exit | +| `awssesh refresh [name]` | Refresh a profile (or all favorites) now | +| `awssesh export ` | Print `export AWS_*` lines for `eval $(...)` | +| `awssesh --version` | Print version and exit | **Shell trick — inject credentials into your current shell:** ```bash -eval $(ssomatic export prod) +eval $(awssesh export prod) ``` --- @@ -94,9 +94,9 @@ eval $(ssomatic export prod) ## How Auto-Refresh Works -SSOmatic tracks the role-credential expiry for each ⟳ pinned profile and refreshes only when the credentials are within the lead window of expiring (default: 5 minutes before expiry). No fixed interval; no wasted refreshes. +awssesh tracks the role-credential expiry for each ⟳ pinned profile and refreshes only when the credentials are within the lead window of expiring (default: 5 minutes before expiry). No fixed interval; no wasted refreshes. -When an interactive SSO login is needed, a desktop notification is sent (`SSOmatic: needs login`). You authorize by logging in from the TUI or with `ssomatic refresh `. +When an interactive SSO login is needed, a desktop notification is sent (`awssesh: needs login`). You authorize by logging in from the TUI or with `awssesh refresh `. --- @@ -111,8 +111,8 @@ When an interactive SSO login is needed, a desktop notification is sent (`SSOmat Requires [Bun](https://bun.sh) >= 1.0. ```bash -git clone https://github.com/tux86/ssomatic.git -cd ssomatic +git clone https://github.com/tux86/awssesh.git +cd awssesh bun install bun run start # Run from source diff --git a/SECURITY.md b/SECURITY.md index e05e30c..8e2c9f5 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,16 +4,16 @@ If you discover a security vulnerability in this project, please report it responsibly. -**Do not open a public issue.** Instead, email the maintainers or use [GitHub's private vulnerability reporting](https://github.com/tux86/ssomatic/security/advisories/new). +**Do not open a public issue.** Instead, email the maintainers or use [GitHub's private vulnerability reporting](https://github.com/tux86/awssesh/security/advisories/new). We will acknowledge your report within 48 hours and aim to provide a fix within 7 days for critical issues. ## Scope -This policy applies to the [`ssomatic`](https://www.npmjs.com/package/ssomatic) npm package. +This policy applies to the [`awssesh`](https://www.npmjs.com/package/awssesh) npm package. ## Best Practices - Never commit AWS credentials, tokens, or secrets -- Use AWS SSO for authentication (which is what SSOmatic facilitates) +- Use AWS SSO for authentication (which is what awssesh facilitates) - Keep dependencies up to date diff --git a/bun.lock b/bun.lock index 968323e..3e55145 100644 --- a/bun.lock +++ b/bun.lock @@ -3,7 +3,7 @@ "configVersion": 1, "workspaces": { "": { - "name": "ssomatic", + "name": "awssesh", "dependencies": { "@aws-sdk/client-sso": "^3.1066.0", "@aws-sdk/client-sso-oidc": "^3.1066.0", @@ -43,11 +43,11 @@ "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], - "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.1066.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.20", "@aws-sdk/types": "^3.973.12", "@smithy/core": "^3.24.6", "@smithy/fetch-http-handler": "^5.4.6", "@smithy/node-http-handler": "^4.7.6", "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-A5jOK8LWrNkl8Fzrs5eAHCfBk88R61vlZDIDv/6mGgHiSpwFUYLN5DDITTMnSIottFFzgQviGdquo3IbQ/jaZQ=="], + "@aws-sdk/client-sso": ["@aws-sdk/client-sso@3.1067.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.20", "@aws-sdk/types": "^3.973.12", "@smithy/core": "^3.24.6", "@smithy/fetch-http-handler": "^5.4.6", "@smithy/node-http-handler": "^4.7.6", "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-vSNc5Zc2Sj9dGf/pJS2656gWZf/bYiLzP5p5jcWx7nM9bcP3zBuTfb4sslvsnh9x5w+hdRDd7rdqZXyJMVYh9A=="], - "@aws-sdk/client-sso-oidc": ["@aws-sdk/client-sso-oidc@3.1066.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.20", "@aws-sdk/credential-provider-node": "^3.972.55", "@aws-sdk/types": "^3.973.12", "@smithy/core": "^3.24.6", "@smithy/fetch-http-handler": "^5.4.6", "@smithy/node-http-handler": "^4.7.6", "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-EdC3k14I1pDKRsIrzrFRH04UDHMeU+XIoRBcje2v0lygivyd3iH0EHbkZhNJDPmTed2juHmeH+1fudHB3c+0Kw=="], + "@aws-sdk/client-sso-oidc": ["@aws-sdk/client-sso-oidc@3.1067.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.20", "@aws-sdk/credential-provider-node": "^3.972.55", "@aws-sdk/types": "^3.973.12", "@smithy/core": "^3.24.6", "@smithy/fetch-http-handler": "^5.4.6", "@smithy/node-http-handler": "^4.7.6", "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-5Lz5nFsMsqkgH0vE6gvF5Rkfk0wBGoZhx27Dlu/7cqiqcDerSNleZNLNfqZi0xka79X+gpVDvyWQGGPOeeWn8g=="], - "@aws-sdk/client-sts": ["@aws-sdk/client-sts@3.1066.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.20", "@aws-sdk/credential-provider-node": "^3.972.55", "@aws-sdk/signature-v4-multi-region": "^3.996.34", "@aws-sdk/types": "^3.973.12", "@smithy/core": "^3.24.6", "@smithy/fetch-http-handler": "^5.4.6", "@smithy/node-http-handler": "^4.7.6", "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-a24RbDdy7L67IzvMjiYRhfoNRljU5mfbjZyKLJlrEpyj4A5ryDqLP1dJS6GU/dtbaSqGd+LUoRTsFkqA7BEcmg=="], + "@aws-sdk/client-sts": ["@aws-sdk/client-sts@3.1067.0", "", { "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "^3.974.20", "@aws-sdk/credential-provider-node": "^3.972.55", "@aws-sdk/signature-v4-multi-region": "^3.996.34", "@aws-sdk/types": "^3.973.12", "@smithy/core": "^3.24.6", "@smithy/fetch-http-handler": "^5.4.6", "@smithy/node-http-handler": "^4.7.6", "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-9ylTBXa54xgj+eBE4ZlCpqTwya2Nwx5kvcHN77iErLHRRIQEobHt4R2Vo6hqeXOOXEHWP5uOT1wXqyANAIa+Dw=="], "@aws-sdk/core": ["@aws-sdk/core@3.974.20", "", { "dependencies": { "@aws-sdk/types": "^3.973.12", "@aws-sdk/xml-builder": "^3.972.29", "@aws/lambda-invoke-store": "^0.2.2", "@smithy/core": "^3.24.6", "@smithy/signature-v4": "^5.4.6", "@smithy/types": "^4.14.3", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7sDi2B2N3mc3nf1nz6FyEx/FCrJ1N1QnBmraHHQNabFaeAh2IaOOLml48/rHOD1bICHgTRkbBgNTvUzEr5Z35g=="], @@ -75,7 +75,7 @@ "@aws-sdk/types": ["@aws-sdk/types@3.973.12", "", { "dependencies": { "@smithy/types": "^4.14.3", "tslib": "^2.6.2" } }, "sha512-43ajd1NF0RMgX5k0hxCNUyEdrtFUsb2aHT2QvpktSC/2Eyb2Jr/JPVqdp0XIoaHWikZJq5tNWSLO6kB5q2eMCA=="], - "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.965.5", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ=="], + "@aws-sdk/util-locate-window": ["@aws-sdk/util-locate-window@3.965.7", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-M0D6oIpohdNHjc7udzTHEQyot0+0iuA36jc2I9Hps+f/GtKi2HO/pyijQnCnNcwZqLB5+rtn81z3eZK/GyjAmA=="], "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.29", "", { "dependencies": { "@smithy/types": "^4.14.3", "fast-xml-parser": "5.7.3", "tslib": "^2.6.2" } }, "sha512-fk0niuGFxfi8yIJuMVM4mhwObkiQSuwZFj3tAPrLVx64Pk3BkrEIpqjzHKY4hKoEBUD6Jg/S74Zj9jy+5F3DnQ=="], @@ -113,13 +113,13 @@ "@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], - "@commitlint/cli": ["@commitlint/cli@20.5.0", "", { "dependencies": { "@commitlint/format": "^20.5.0", "@commitlint/lint": "^20.5.0", "@commitlint/load": "^20.5.0", "@commitlint/read": "^20.5.0", "@commitlint/types": "^20.5.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, "bin": { "commitlint": "./cli.js" } }, "sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ=="], + "@commitlint/cli": ["@commitlint/cli@20.5.3", "", { "dependencies": { "@commitlint/format": "^20.5.0", "@commitlint/lint": "^20.5.3", "@commitlint/load": "^20.5.3", "@commitlint/read": "^20.5.0", "@commitlint/types": "^20.5.0", "tinyexec": "^1.0.0", "yargs": "^17.0.0" }, "bin": { "commitlint": "./cli.js" } }, "sha512-OJdL0EXWD5y9LPa0nr/geOwzaS8BsdaybKkcloB0JgsguGxNv2R+hC2FTPqrAcprg35zF33KOQerY0x8W1aesA=="], - "@commitlint/config-conventional": ["@commitlint/config-conventional@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "conventional-changelog-conventionalcommits": "^9.2.0" } }, "sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA=="], + "@commitlint/config-conventional": ["@commitlint/config-conventional@20.5.3", "", { "dependencies": { "@commitlint/types": "^20.5.0", "conventional-changelog-conventionalcommits": "^9.2.0" } }, "sha512-j34Qqeaa152chJgz2ysyk0BCpHenJn1lV0Rx0VXf8k3ccQcED+48EZrzMvo9jLmJUyBrrBwvu89I+2er4gW7QQ=="], "@commitlint/config-validator": ["@commitlint/config-validator@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "ajv": "^8.11.0" } }, "sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw=="], - "@commitlint/ensure": ["@commitlint/ensure@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", "lodash.startcase": "^4.4.0", "lodash.upperfirst": "^4.3.1" } }, "sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw=="], + "@commitlint/ensure": ["@commitlint/ensure@20.5.3", "", { "dependencies": { "@commitlint/types": "^20.5.0", "es-toolkit": "^1.46.0" } }, "sha512-4i4AgNvH62owG9MwSiWKrle7HGNpBHHdLnWFIp5fTsHUYe5kRuh15t08L/0pdbbrRk8JKXQxxN4hZQcn+szkrw=="], "@commitlint/execute-rule": ["@commitlint/execute-rule@20.0.0", "", {}, "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw=="], @@ -127,9 +127,9 @@ "@commitlint/is-ignored": ["@commitlint/is-ignored@20.5.0", "", { "dependencies": { "@commitlint/types": "^20.5.0", "semver": "^7.6.0" } }, "sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg=="], - "@commitlint/lint": ["@commitlint/lint@20.5.0", "", { "dependencies": { "@commitlint/is-ignored": "^20.5.0", "@commitlint/parse": "^20.5.0", "@commitlint/rules": "^20.5.0", "@commitlint/types": "^20.5.0" } }, "sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA=="], + "@commitlint/lint": ["@commitlint/lint@20.5.3", "", { "dependencies": { "@commitlint/is-ignored": "^20.5.0", "@commitlint/parse": "^20.5.0", "@commitlint/rules": "^20.5.3", "@commitlint/types": "^20.5.0" } }, "sha512-M7JbWBNr2gXKaPc4i/KipsuW1gkDHpj35KPjWtKy3Z+2AQw5wu1gBi1LIO0uoaij67CqY4K8PxPZSGens4evCw=="], - "@commitlint/load": ["@commitlint/load@20.5.0", "", { "dependencies": { "@commitlint/config-validator": "^20.5.0", "@commitlint/execute-rule": "^20.0.0", "@commitlint/resolve-extends": "^20.5.0", "@commitlint/types": "^20.5.0", "cosmiconfig": "^9.0.1", "cosmiconfig-typescript-loader": "^6.1.0", "is-plain-obj": "^4.1.0", "lodash.mergewith": "^4.6.2", "picocolors": "^1.1.1" } }, "sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw=="], + "@commitlint/load": ["@commitlint/load@20.5.3", "", { "dependencies": { "@commitlint/config-validator": "^20.5.0", "@commitlint/execute-rule": "^20.0.0", "@commitlint/resolve-extends": "^20.5.3", "@commitlint/types": "^20.5.0", "cosmiconfig": "^9.0.1", "cosmiconfig-typescript-loader": "^6.1.0", "es-toolkit": "^1.46.0", "is-plain-obj": "^4.1.0", "picocolors": "^1.1.1" } }, "sha512-1FDZWuKyu98Myb8i7Tp31jPU2rZpOwAdYRyJcy2KoGg7Xk2A+bgHN8smhMaaNSNkmE8fwt53BokywZq8Gv/5XQ=="], "@commitlint/message": ["@commitlint/message@20.4.3", "", {}, "sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ=="], @@ -137,9 +137,9 @@ "@commitlint/read": ["@commitlint/read@20.5.0", "", { "dependencies": { "@commitlint/top-level": "^20.4.3", "@commitlint/types": "^20.5.0", "git-raw-commits": "^5.0.0", "minimist": "^1.2.8", "tinyexec": "^1.0.0" } }, "sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w=="], - "@commitlint/resolve-extends": ["@commitlint/resolve-extends@20.5.0", "", { "dependencies": { "@commitlint/config-validator": "^20.5.0", "@commitlint/types": "^20.5.0", "global-directory": "^4.0.1", "import-meta-resolve": "^4.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0" } }, "sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg=="], + "@commitlint/resolve-extends": ["@commitlint/resolve-extends@20.5.3", "", { "dependencies": { "@commitlint/config-validator": "^20.5.0", "@commitlint/types": "^20.5.0", "es-toolkit": "^1.46.0", "global-directory": "^5.0.0", "import-meta-resolve": "^4.0.0", "resolve-from": "^5.0.0" } }, "sha512-+ogW9v/u9JqpvAgTrLra/YTFo0KkjU6iNblF89pPsj4NebNc+DAWctsludwezI8YnsjBmfHpApSwcXprN/f/ew=="], - "@commitlint/rules": ["@commitlint/rules@20.5.0", "", { "dependencies": { "@commitlint/ensure": "^20.5.0", "@commitlint/message": "^20.4.3", "@commitlint/to-lines": "^20.0.0", "@commitlint/types": "^20.5.0" } }, "sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ=="], + "@commitlint/rules": ["@commitlint/rules@20.5.3", "", { "dependencies": { "@commitlint/ensure": "^20.5.3", "@commitlint/message": "^20.4.3", "@commitlint/to-lines": "^20.0.0", "@commitlint/types": "^20.5.0" } }, "sha512-MPlMnb9D3wbszYMp+1hPtuhtPJndRo6I6yfkZVA4+jR8w7Kqp0u2u/Y+gzbaItx5Lltq5rw7FSZQWJMoXUC4NQ=="], "@commitlint/to-lines": ["@commitlint/to-lines@20.0.0", "", {}, "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw=="], @@ -147,7 +147,7 @@ "@commitlint/types": ["@commitlint/types@20.5.0", "", { "dependencies": { "conventional-commits-parser": "^6.3.0", "picocolors": "^1.1.1" } }, "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA=="], - "@conventional-changelog/git-client": ["@conventional-changelog/git-client@2.6.0", "", { "dependencies": { "@simple-libs/child-process-utils": "^1.0.0", "@simple-libs/stream-utils": "^1.2.0", "semver": "^7.5.2" }, "peerDependencies": { "conventional-commits-filter": "^5.0.0", "conventional-commits-parser": "^6.3.0" }, "optionalPeers": ["conventional-commits-filter", "conventional-commits-parser"] }, "sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg=="], + "@conventional-changelog/git-client": ["@conventional-changelog/git-client@2.7.0", "", { "dependencies": { "@simple-libs/child-process-utils": "^1.0.0", "@simple-libs/stream-utils": "^1.2.0", "semver": "^7.5.2" }, "peerDependencies": { "conventional-commits-filter": "^5.0.0", "conventional-commits-parser": "^6.4.0" }, "optionalPeers": ["conventional-commits-filter", "conventional-commits-parser"] }, "sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw=="], "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], @@ -165,9 +165,11 @@ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.7.2", "", { "dependencies": { "@eslint/core": "^1.2.1", "levn": "^0.4.1" } }, "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A=="], - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], - "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="], + + "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="], "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], @@ -183,7 +185,7 @@ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], - "@nodable/entities": ["@nodable/entities@2.1.1", "", {}, "sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg=="], + "@nodable/entities": ["@nodable/entities@2.2.0", "", {}, "sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg=="], "@simple-libs/child-process-utils": ["@simple-libs/child-process-utils@1.0.2", "", { "dependencies": { "@simple-libs/stream-utils": "^1.2.0" } }, "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw=="], @@ -209,13 +211,13 @@ "@types/esrecurse": ["@types/esrecurse@4.3.1", "", {}, "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], "@types/ini": ["@types/ini@4.1.1", "", {}, "sha512-MIyNUZipBTbyUNnhvuXJTY7B6qNI78meck9Jbv3wk0OgNwRyOOVEKDutAkOs1snB/tx0FafyR6/SN4Ps0hZPeg=="], "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], - "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@types/node": ["@types/node@25.9.3", "", { "dependencies": { "undici-types": ">=7.24.0 <7.24.7" } }, "sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg=="], "@types/react": ["@types/react@19.2.17", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw=="], @@ -239,11 +241,11 @@ "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.61.0", "", { "dependencies": { "@typescript-eslint/types": "8.61.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ=="], - "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + "acorn": ["acorn@8.17.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], + "ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], "ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="], @@ -279,17 +281,17 @@ "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.35", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-honAfLBde0HAFLdNyBEfuuENkF6zR+ozxqxa/2zJKHBe1qzLqyTSeRKpdPEHAP03rlDGyQOPnCSxnVpVqQo9Mg=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.36", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-lVq/Df7LXlO79MVaaUHztSwWiG9oXoWHlgvNS51v8Dpd4+G4/VIy6qYePTw31nAVls33nUtnfezYeLkYAak9dg=="], "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], - "brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], + "brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], - "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -321,21 +323,19 @@ "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], - "conventional-changelog-angular": ["conventional-changelog-angular@8.3.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-DOuBwYSqWzfwuRByY9O4oOIvDlkUCTDzfbOgcSbkY+imXXj+4tmrEFao3K+FxemClYfYnZzsvudbwrhje9VHDA=="], - - "conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@9.3.0", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-kYFx6gAyjSIMwNtASkI3ZE99U1fuVDJr0yTYgVy+I2QG46zNZfl2her+0+eoviG82c5WQvW1jMt1eOQTeJLodA=="], + "conventional-changelog-angular": ["conventional-changelog-angular@8.3.1", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg=="], - "conventional-commits-filter": ["conventional-commits-filter@5.0.0", "", {}, "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q=="], + "conventional-changelog-conventionalcommits": ["conventional-changelog-conventionalcommits@9.3.1", "", { "dependencies": { "compare-func": "^2.0.0" } }, "sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw=="], - "conventional-commits-parser": ["conventional-commits-parser@6.3.0", "", { "dependencies": { "@simple-libs/stream-utils": "^1.2.0", "meow": "^13.0.0" }, "bin": { "conventional-commits-parser": "dist/cli/index.js" } }, "sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg=="], + "conventional-commits-parser": ["conventional-commits-parser@6.4.0", "", { "dependencies": { "@simple-libs/stream-utils": "^1.2.0", "meow": "^13.0.0" }, "bin": { "conventional-commits-parser": "dist/cli/index.js" } }, "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw=="], "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], "convert-to-spaces": ["convert-to-spaces@2.0.1", "", {}, "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ=="], - "cosmiconfig": ["cosmiconfig@9.0.1", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ=="], + "cosmiconfig": ["cosmiconfig@9.0.2", "", { "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0" }, "peerDependencies": { "typescript": ">=4.9.5" }, "optionalPeers": ["typescript"] }, "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg=="], - "cosmiconfig-typescript-loader": ["cosmiconfig-typescript-loader@6.2.0", "", { "dependencies": { "jiti": "^2.6.1" }, "peerDependencies": { "@types/node": "*", "cosmiconfig": ">=9", "typescript": ">=5" } }, "sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ=="], + "cosmiconfig-typescript-loader": ["cosmiconfig-typescript-loader@6.3.0", "", { "dependencies": { "jiti": "2.6.1" }, "peerDependencies": { "@types/node": "*", "cosmiconfig": ">=9", "typescript": ">=5" } }, "sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA=="], "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], @@ -361,7 +361,7 @@ "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - "electron-to-chromium": ["electron-to-chromium@1.5.371", "", {}, "sha512-e9htk9mAYL6AzmkEhSvVVw7IWGSBJ/Bqdn2eRyRLrj1g6sncN4WbFt5qnILYoCktktr45pyjIrOiRvBThQ808w=="], + "electron-to-chromium": ["electron-to-chromium@1.5.372", "", {}, "sha512-M3yhbAlilnwqC8D21t28UCDGHyitShTmmLRU/H+b74P6Ski16Nb9HONYEaVpMj/pwC7BEo5B95FpjODLCWbtfA=="], "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -371,15 +371,15 @@ "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], - "es-abstract": ["es-abstract@1.24.1", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw=="], + "es-abstract": ["es-abstract@1.24.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-iterator-helpers": ["es-iterator-helpers@1.3.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.1", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0", "safe-array-concat": "^1.1.3" } }, "sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ=="], + "es-iterator-helpers": ["es-iterator-helpers@1.3.3", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-0PuBxFi+4uPanB97iDxCLWuHeYud2FALrw5HFZGtAF38UpJDbDC8frwp2cnDyae692CQ0dou60UwWfhgsa4U/g=="], - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + "es-object-atoms": ["es-object-atoms@1.1.2", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="], "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], @@ -387,7 +387,7 @@ "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="], - "es-toolkit": ["es-toolkit@1.45.1", "", {}, "sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw=="], + "es-toolkit": ["es-toolkit@1.47.1", "", {}, "sha512-5RAqEwf4P4E17p+W75KLOWw/nOvKZzSQpxM32IpI2KZLaVonjTrZ0Ai5ghMaVI9eKC2p8eoQgcBdkEDgzFk6+Q=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -419,7 +419,7 @@ "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + "fast-uri": ["fast-uri@3.1.2", "", {}, "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ=="], "fast-xml-builder": ["fast-xml-builder@1.2.0", "", { "dependencies": { "path-expression-matcher": "^1.5.0", "xml-naming": "^0.1.0" } }, "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q=="], @@ -439,7 +439,7 @@ "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], + "function.prototype.name": ["function.prototype.name@1.2.0", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2", "hasown": "^2.0.4", "is-callable": "^1.2.7", "is-document.all": "^1.0.0" } }, "sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew=="], "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], @@ -449,7 +449,7 @@ "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], - "get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="], + "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="], "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], @@ -461,7 +461,7 @@ "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], - "global-directory": ["global-directory@4.0.1", "", { "dependencies": { "ini": "4.1.1" } }, "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q=="], + "global-directory": ["global-directory@5.0.0", "", { "dependencies": { "ini": "6.0.0" } }, "sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w=="], "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], @@ -477,7 +477,7 @@ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="], @@ -515,12 +515,14 @@ "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + "is-document.all": ["is-document.all@1.0.0", "", { "dependencies": { "call-bound": "^1.0.4" } }, "sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g=="], + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="], @@ -571,7 +573,7 @@ "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + "js-yaml": ["js-yaml@4.2.0", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw=="], "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], @@ -595,18 +597,6 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="], - - "lodash.kebabcase": ["lodash.kebabcase@4.1.1", "", {}, "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g=="], - - "lodash.mergewith": ["lodash.mergewith@4.6.2", "", {}, "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="], - - "lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="], - - "lodash.startcase": ["lodash.startcase@4.4.0", "", {}, "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg=="], - - "lodash.upperfirst": ["lodash.upperfirst@4.3.1", "", {}, "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg=="], - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -617,7 +607,7 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], @@ -693,13 +683,13 @@ "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], - "resolve": ["resolve@2.0.0-next.6", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA=="], + "resolve": ["resolve@2.0.0-next.7", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.2", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ=="], "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], "restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="], - "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="], @@ -719,9 +709,9 @@ "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + "side-channel": ["side-channel@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4", "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="], - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], @@ -735,15 +725,15 @@ "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - "string-width": ["string-width@8.2.0", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw=="], + "string-width": ["string-width@8.2.1", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA=="], "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="], "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="], - "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="], + "string.prototype.trim": ["string.prototype.trim@1.2.11", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-object-atoms": "^1.1.2", "has-property-descriptors": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w=="], - "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="], + "string.prototype.trimend": ["string.prototype.trimend@1.0.10", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.2" } }, "sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw=="], "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="], @@ -757,9 +747,9 @@ "terminal-size": ["terminal-size@4.0.1", "", {}, "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ=="], - "tinyexec": ["tinyexec@1.0.4", "", {}, "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="], + "tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tinyglobby": ["tinyglobby@0.2.17", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g=="], "ts-api-utils": ["ts-api-utils@2.5.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA=="], @@ -767,7 +757,7 @@ "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], - "type-fest": ["type-fest@5.5.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g=="], + "type-fest": ["type-fest@5.7.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg=="], "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], @@ -775,13 +765,13 @@ "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="], - "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="], + "typed-array-length": ["typed-array-length@1.0.8", "", { "dependencies": { "call-bind": "^1.0.9", "for-each": "^0.3.5", "gopd": "^1.2.0", "is-typed-array": "^1.1.15", "possible-typed-array-names": "^1.1.0", "reflect.getprototypeof": "^1.0.10" } }, "sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g=="], "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "undici-types": ["undici-types@7.24.6", "", {}, "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg=="], "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], @@ -795,7 +785,7 @@ "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], + "which-typed-array": ["which-typed-array@1.1.22", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw=="], "widest-line": ["widest-line@6.0.0", "", { "dependencies": { "string-width": "^8.1.0" } }, "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA=="], @@ -803,7 +793,7 @@ "wrap-ansi": ["wrap-ansi@10.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "string-width": "^8.2.0", "strip-ansi": "^7.1.2" } }, "sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ=="], - "ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + "ws": ["ws@8.21.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g=="], "xml-naming": ["xml-naming@0.1.0", "", {}, "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw=="], @@ -823,21 +813,15 @@ "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="], - "@aws-crypto/sha256-browser/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="], + "@commitlint/config-validator/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], - "@aws-crypto/sha256-js/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="], + "@commitlint/is-ignored/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], - "@aws-crypto/util/@aws-sdk/types": ["@aws-sdk/types@3.973.6", "", { "dependencies": { "@smithy/types": "^4.13.1", "tslib": "^2.6.2" } }, "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw=="], - - "@commitlint/config-validator/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "@commitlint/is-ignored/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], - - "@conventional-changelog/git-client/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "@conventional-changelog/git-client/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], - "@typescript-eslint/typescript-estree/semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "@typescript-eslint/typescript-estree/semver": ["semver@7.8.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA=="], "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -849,22 +833,14 @@ "eslint-plugin-react/minimatch": ["minimatch@3.1.5", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w=="], - "global-directory/ini": ["ini@4.1.1", "", {}, "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="], + "global-directory/ini": ["ini@6.0.0", "", {}, "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ=="], "import-fresh/resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], - "parse-json/@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], - "stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "@aws-crypto/sha256-browser/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g=="], - - "@aws-crypto/sha256-js/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g=="], - - "@aws-crypto/util/@aws-sdk/types/@smithy/types": ["@smithy/types@4.13.1", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g=="], - "@commitlint/config-validator/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "cliui/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], @@ -873,9 +849,7 @@ "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "eslint-plugin-react/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], - - "parse-json/@babel/code-frame/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "eslint-plugin-react/minimatch/brace-expansion": ["brace-expansion@1.1.15", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg=="], "yargs/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], diff --git a/docs/screenshots/cli-demo.gif b/docs/screenshots/cli-demo.gif index 0a43558..4db8e1c 100644 Binary files a/docs/screenshots/cli-demo.gif and b/docs/screenshots/cli-demo.gif differ diff --git a/docs/superpowers/plans/2026-06-11-cli-only-npm-modernization.md b/docs/superpowers/plans/2026-06-11-cli-only-npm-modernization.md index 1b8fbd9..f4ea37f 100644 --- a/docs/superpowers/plans/2026-06-11-cli-only-npm-modernization.md +++ b/docs/superpowers/plans/2026-06-11-cli-only-npm-modernization.md @@ -1,10 +1,10 @@ -# SSOmatic v2 — CLI-only, npm, KISS — Implementation Plan +# awssesh v2 — CLI-only, npm, KISS — Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. -**Goal:** Turn SSOmatic into a professional, KISS, CLI-only tool distributed via npm — by removing the web layer, making the code runtime-agnostic (Node + Bun), adding unit tests, and modernizing packaging/CI/docs. +**Goal:** Turn awssesh into a professional, KISS, CLI-only tool distributed via npm — by removing the web layer, making the code runtime-agnostic (Node + Bun), adding unit tests, and modernizing packaging/CI/docs. -**Architecture:** Keep the existing `src/aws/` (UI-agnostic logic) ↔ `src/cli/` (Ink TUI) split. Delete `src/web/` and its toolchain. Replace Bun-only file/process APIs in `src/aws/sso.ts` with `node:fs/promises` + `node:child_process` so `npx ssomatic` runs under Node. Build a single `dist/cli.js` with `bun build --target node`, ship it as an npm `bin`, and publish via the existing semantic-release pipeline. +**Architecture:** Keep the existing `src/aws/` (UI-agnostic logic) ↔ `src/cli/` (Ink TUI) split. Delete `src/web/` and its toolchain. Replace Bun-only file/process APIs in `src/aws/sso.ts` with `node:fs/promises` + `node:child_process` so `npx awssesh` runs under Node. Build a single `dist/cli.js` with `bun build --target node`, ship it as an npm `bin`, and publish via the existing semantic-release pipeline. **Tech Stack:** Bun (dev runtime + test runner + bundler), TypeScript, React + Ink (TUI), AWS SDK v3, semantic-release. @@ -454,7 +454,7 @@ let TMP: string; let sso: typeof import("./sso.ts"); beforeAll(async () => { - TMP = await mkdtemp(join(tmpdir(), "ssomatic-test-")); + TMP = await mkdtemp(join(tmpdir(), "awssesh-test-")); process.env.HOME = TMP; process.env.USERPROFILE = TMP; sso = await import("./sso.ts"); @@ -815,7 +815,7 @@ Add these top-level fields (place near `"license"`): ```json "type": "module", - "bin": { "ssomatic": "dist/cli.js" }, + "bin": { "awssesh": "dist/cli.js" }, "files": ["dist"], "engines": { "node": ">=18" }, ``` @@ -841,12 +841,12 @@ and re-run `bun run build`, then re-check `head -1 dist/cli.js`. - [ ] **Step 4: Smoke-test under plain Node** Run: `node dist/cli.js --version` -Expected: prints `ssomatic v` and exits 0 (proves the runtime refactor works without Bun). +Expected: prints `awssesh v` and exits 0 (proves the runtime refactor works without Bun). - [ ] **Step 5: Smoke-test the bin link locally** Run: `chmod +x dist/cli.js && ./dist/cli.js --version` -Expected: prints `ssomatic v`. +Expected: prints `awssesh v`. - [ ] **Step 6: Commit** @@ -895,8 +895,8 @@ Replace the `Build` and `Verify output` steps: - name: Verify output run: | - test -f dist/ssomatic - ls -lh dist/ssomatic + test -f dist/awssesh + ls -lh dist/awssesh ``` with a test + build + Node-runnable check: @@ -937,7 +937,7 @@ to: HUSKY: "0" ``` -Then delete the entire `build:` job (the OS matrix that renames/uploads `ssomatic-*` binaries) and the entire `update-homebrew:` job. Also delete the now-unused `outputs:`/`Check if released` plumbing that only fed those jobs: +Then delete the entire `build:` job (the OS matrix that renames/uploads `awssesh-*` binaries) and the entire `update-homebrew:` job. Also delete the now-unused `outputs:`/`Check if released` plumbing that only fed those jobs: - Remove the `outputs:` block under the `release:` job. - Remove the `- name: Check if released` step (the `id: version` step). @@ -1019,19 +1019,19 @@ Add a `"keywords"` field: ```bash # Run without installing -npx ssomatic -bunx ssomatic +npx awssesh +bunx awssesh # Or install globally -npm install -g ssomatic +npm install -g awssesh ``` ``` - Add an npm badge to the badge block: ```markdown -[![npm version](https://img.shields.io/npm/v/ssomatic)](https://www.npmjs.com/package/ssomatic) -[![npm downloads](https://img.shields.io/npm/dm/ssomatic)](https://www.npmjs.com/package/ssomatic) +[![npm version](https://img.shields.io/npm/v/awssesh)](https://www.npmjs.com/package/awssesh) +[![npm downloads](https://img.shields.io/npm/dm/awssesh)](https://www.npmjs.com/package/awssesh) ``` - Remove any "press `w` to toggle web" mention and the `w` row from the keyboard-shortcuts table. @@ -1045,7 +1045,7 @@ git rm docs/screenshots/web-demo.gif 2>/dev/null || true - [ ] **Step 4: Update `CLAUDE.md`** - In **Project Overview**, change to: "Interactive AWS SSO credential manager — a terminal CLI built with Bun + React + Ink." Remove the "Press `w` to toggle a built-in web server" sentence. -- In **Structure**, delete the `src/web/` subtree and the `dist/ssomatic` line; show `dist/cli.js` and `src/aws/*.test.ts`. +- In **Structure**, delete the `src/web/` subtree and the `dist/awssesh` line; show `dist/cli.js` and `src/aws/*.test.ts`. - In **Tech Stack**, remove the Vite and Tailwind rows. - In **Commands**, update `build` to "Build the Node CLI bundle (`dist/cli.js`)" and add `bun test`. - In **Keyboard Shortcuts**, remove the `w` row. diff --git a/docs/superpowers/specs/2026-06-11-cli-only-npm-modernization-design.md b/docs/superpowers/specs/2026-06-11-cli-only-npm-modernization-design.md index 69c8a09..cc873e6 100644 --- a/docs/superpowers/specs/2026-06-11-cli-only-npm-modernization-design.md +++ b/docs/superpowers/specs/2026-06-11-cli-only-npm-modernization-design.md @@ -1,12 +1,12 @@ -# SSOmatic v2 — CLI-only, npm, KISS — Design +# awssesh v2 — CLI-only, npm, KISS — Design **Date:** 2026-06-11 **Status:** Approved (design phase) ## Goal -Simplify SSOmatic (KISS) into a professional public GitHub project: -**interactive CLI only** (drop the web layer), distributed via **npm** (`npx ssomatic`), +Simplify awssesh (KISS) into a professional public GitHub project: +**interactive CLI only** (drop the web layer), distributed via **npm** (`npx awssesh`), **runtime-agnostic** code (Node + Bun), with **unit tests** on the AWS/SSO logic. No user-facing feature is removed: status, refresh/login, daemon (auto-refresh), @@ -19,7 +19,7 @@ plumbing, packaging, and modernization. |----------|----------| | CLI form | Interactive TUI only (as today) | | Features | All kept (status, refresh/login, daemon, favorites + notifications) | -| Distribution | npm — `npx ssomatic` / `bunx ssomatic` / `npm i -g ssomatic` | +| Distribution | npm — `npx awssesh` / `bunx awssesh` / `npm i -g awssesh` | | Runtime | Node ≥ 18 **and** Bun (runtime-agnostic code) | | Tests | Unit tests on AWS/SSO logic (`bun test`), no TUI tests | @@ -60,7 +60,7 @@ src/ ## 2. Runtime-agnostic code (Node + Bun) The ~9 Bun-specific calls in `src/aws/sso.ts` are replaced with standard Node APIs -so that `npx ssomatic` (which runs under Node) works: +so that `npx awssesh` (which runs under Node) works: | Bun (current) | Node replacement | |---------------|------------------| @@ -83,7 +83,7 @@ The result runs under **Node ≥ 18 and Bun**. `src/aws/utils.ts` already uses ### `package.json` - `"private": true` → **removed** - Added: - - `"bin": { "ssomatic": "dist/cli.js" }` + - `"bin": { "awssesh": "dist/cli.js" }` - `"files": ["dist"]` - `"engines": { "node": ">=18" }` - Build output carries the `#!/usr/bin/env node` shebang @@ -122,9 +122,9 @@ bun build src/cli/index.tsx --target node --outfile dist/cli.js ### Final usage ```bash -npx ssomatic # zero install -bunx ssomatic -npm i -g ssomatic # global install +npx awssesh # zero install +bunx awssesh +npm i -g awssesh # global install ``` --- diff --git a/package.json b/package.json index 17894c4..62cfd7e 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ssomatic", + "name": "awssesh", "version": "1.4.0", "description": "AWS SSO credential manager — a fast terminal dashboard that keeps your pinned profiles' credentials fresh (expiry-aware), with one-keystroke copy, console open, and env export.", "keywords": [ @@ -16,7 +16,7 @@ "type": "module", "license": "MIT", "bin": { - "ssomatic": "dist/cli.js" + "awssesh": "dist/cli.js" }, "files": [ "dist" @@ -28,10 +28,10 @@ "packageManager": "bun@1.3.14", "repository": { "type": "git", - "url": "https://github.com/tux86/ssomatic.git" + "url": "https://github.com/tux86/awssesh.git" }, "author": "tux86", - "homepage": "https://github.com/tux86/ssomatic", + "homepage": "https://github.com/tux86/awssesh", "scripts": { "start": "bun run src/cli/index.tsx", "dev": "bun run --watch src/cli/index.tsx", diff --git a/release-please-config.json b/release-please-config.json index 383f02a..f0993cd 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -3,7 +3,7 @@ "packages": { ".": { "release-type": "node", - "package-name": "ssomatic", + "package-name": "awssesh", "changelog-path": "CHANGELOG.md", "include-component-in-tag": false, "bump-minor-pre-major": false, diff --git a/scripts/demo/demo.tape b/scripts/demo/demo.tape index 18e9ca9..54c8818 100644 --- a/scripts/demo/demo.tape +++ b/scripts/demo/demo.tape @@ -1,4 +1,4 @@ -# SSOmatic demo recording (VHS — https://github.com/charmbracelet/vhs) +# awssesh demo recording (VHS — https://github.com/charmbracelet/vhs) # # Regenerate with: bun run demo (builds, generates the fixture, records) # or manually: bun run build && bun scripts/demo/fixture.ts && vhs scripts/demo/demo.tape @@ -6,10 +6,10 @@ # No custom theme or effects: VHS's default neutral dark terminal renders the # app's own ANSI colors, so the GIF looks exactly like a real run. # -# SSOMATIC_DEMO=1 stubs the interactive SSO network calls (device-auth + +# AWSSESH_DEMO=1 stubs the interactive SSO network calls (device-auth + # silent refresh) with canned values, so the login screen and the ⟳ auto-refresh # render offline from the mock ~/.aws sandbox. The displayed command is the real -# `npx ssomatic` users run; a shell function shadows it to the local build. +# `npx awssesh` users run; a shell function shadows it to the local build. Output docs/screenshots/cli-demo.gif @@ -20,9 +20,9 @@ Set Height 760 Set Padding 20 # ── Off-camera setup: mock sandbox HOME, demo stubs, offline update check, and -# shadow `npx` so the on-screen `npx ssomatic` runs the freshly built binary. +# shadow `npx` so the on-screen `npx awssesh` runs the freshly built binary. Hide -Type "export HOME=$PWD/docs/demo/home SSOMATIC_DEMO=1 NODE_USE_ENV_PROXY=1 https_proxy=http://127.0.0.1:9" +Type "export HOME=$PWD/docs/demo/home AWSSESH_DEMO=1 NODE_USE_ENV_PROXY=1 https_proxy=http://127.0.0.1:9" Enter Type "npx() { node $PWD/dist/cli.js; }" Enter @@ -31,7 +31,7 @@ Enter Show # ── Launch the dashboard ───────────────────────────────────────────────────── -Type "npx ssomatic" +Type "npx awssesh" Enter Sleep 2.5s diff --git a/scripts/demo/fixture.ts b/scripts/demo/fixture.ts index 613ec01..301c00d 100644 --- a/scripts/demo/fixture.ts +++ b/scripts/demo/fixture.ts @@ -6,7 +6,7 @@ * account or live calls. Timestamps are stamped fresh on every run so the * "expires" countdowns are accurate at record time. * - * SSOmatic derives a profile's state purely from local disk: + * awssesh derives a profile's state purely from local disk: * - discoverProfiles() reads ~/.aws/config * - findCachedToken() reads ~/.aws/sso/cache/.json * - buildLocalProfileStates(): valid (future-dated token) | needs-login (no token) diff --git a/src/aws/console.ts b/src/aws/console.ts index dfcb83c..c4a3630 100644 --- a/src/aws/console.ts +++ b/src/aws/console.ts @@ -15,7 +15,7 @@ export function buildExportBlock(creds: { export function buildFederationSigninUrl(signinToken: string, destination = "https://console.aws.amazon.com/"): string { const params = new URLSearchParams({ Action: "login", - Issuer: "ssomatic", + Issuer: "awssesh", Destination: destination, SigninToken: signinToken, }); diff --git a/src/aws/settings.test.ts b/src/aws/settings.test.ts index bbcf8a9..c323611 100644 --- a/src/aws/settings.test.ts +++ b/src/aws/settings.test.ts @@ -8,7 +8,7 @@ let prevHome: string | undefined; beforeEach(() => { prevHome = process.env.HOME; - home = mkdtempSync(join(tmpdir(), "ssomatic-settings-")); + home = mkdtempSync(join(tmpdir(), "awssesh-settings-")); process.env.HOME = home; }); afterEach(() => { diff --git a/src/aws/sso.test.ts b/src/aws/sso.test.ts index 46d8b74..c2f8d88 100644 --- a/src/aws/sso.test.ts +++ b/src/aws/sso.test.ts @@ -7,7 +7,7 @@ let TMP: string; let sso: typeof import("./sso.ts"); beforeAll(async () => { - TMP = await mkdtemp(join(tmpdir(), "ssomatic-test-")); + TMP = await mkdtemp(join(tmpdir(), "awssesh-test-")); process.env.HOME = TMP; process.env.USERPROFILE = TMP; sso = await import("./sso.ts"); diff --git a/src/aws/sso.ts b/src/aws/sso.ts index 1c89643..31812a6 100644 --- a/src/aws/sso.ts +++ b/src/aws/sso.ts @@ -1,5 +1,5 @@ /** - * SSOmatic - Core business logic (UI-agnostic) + * awssesh - Core business logic (UI-agnostic) * Used by the CLI (Ink) interface */ @@ -79,12 +79,12 @@ export const CREDENTIALS_PATH = `${AWS_DIR}/credentials`; export const SSO_CACHE_DIR = `${AWS_DIR}/sso/cache`; /** - * Demo recording mode. When `SSOMATIC_DEMO` is set, the interactive SSO network + * Demo recording mode. When `AWSSESH_DEMO` is set, the interactive SSO network * calls are stubbed with canned values so the README demo GIF (scripts/demo/) * can show the device-login screen and the silent auto-refresh using mock data, * fully offline. Inert for real users — has no effect unless the env var is set. */ -const DEMO = !!process.env.SSOMATIC_DEMO; +const DEMO = !!process.env.AWSSESH_DEMO; // ───────────────────────────────────────────────────────────────────────────── // File Utilities @@ -223,7 +223,7 @@ export async function startDeviceAuthorization(profile: SSOProfile): Promise { process.stderr.write( `cannot export ${profileName}: ${ result.needsLogin - ? `needs login (run: ssomatic refresh ${profileName})` + ? `needs login (run: awssesh refresh ${profileName})` : result.error }\n` ); diff --git a/src/cli/components/Wordmark.tsx b/src/cli/components/Wordmark.tsx index ef3b29d..42065f5 100644 --- a/src/cli/components/Wordmark.tsx +++ b/src/cli/components/Wordmark.tsx @@ -2,20 +2,35 @@ import React from "react"; import { Box, Text } from "ink"; import { VERSION } from "../../version.js"; +// "AWSSESH" in the toilet `pagga` half-block font (W hand-widened so it reads as +// W, not H). Two-tone: "AWS" in AWS-orange, "SESH" in a cool cyan→indigo gradient. const ART = [ - "░█▀▀░█▀▀░█▀█░█▄█░█▀█░▀█▀░▀█▀░█▀▀", - "░▀▀█░▀▀█░█░█░█░█░█▀█░░█░░░█░░█░░", - "░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀░▀░░▀░░▀▀▀░▀▀▀", + "░█▀█░█░░░█░█▀▀░█▀▀░█▀▀░█▀▀░█░█", + "░█▀█░█░█░█░▀▀█░▀▀█░█▀▀░▀▀█░█▀█", + "░▀░▀░░▀▀▀░░▀▀▀░▀▀▀░▀▀▀░▀▀▀░▀░▀", ]; -const START: [number, number, number] = [0xfd, 0xe0, 0x47]; // #fde047 yellow -const END: [number, number, number] = [0xef, 0x44, 0x44]; // #ef4444 red + +// Column where "SESH" begins (after A·W·S + separators). Drives the color split. +const SESH_AT = 14; const W = Math.max(...ART.map((l) => l.length)); -function hexAt(x: number): string { - const t = W > 1 ? x / (W - 1) : 0; - const c = (i: number) => Math.round(START[i] + (END[i] - START[i]) * t); + +// Two fire bands: AWS = bright gold→orange, SESH = hotter orange→red. +const AWS_A: [number, number, number] = [0xff, 0xcc, 0x33]; // #ffcc33 gold +const AWS_B: [number, number, number] = [0xff, 0x95, 0x00]; // #ff9500 orange +const SESH_A: [number, number, number] = [0xff, 0x6a, 0x1a]; // #ff6a1a orange-red +const SESH_B: [number, number, number] = [0xe2, 0x3b, 0x2e]; // #e23b2e red + +function lerp(a: [number, number, number], b: [number, number, number], t: number): string { + const c = (i: number) => Math.round(a[i] + (b[i] - a[i]) * t); return `#${[c(0), c(1), c(2)].map((n) => n.toString(16).padStart(2, "0")).join("")}`; } +function hexAt(x: number): string { + if (x < SESH_AT) return lerp(AWS_A, AWS_B, SESH_AT > 1 ? x / (SESH_AT - 1) : 0); + const span = W - 1 - SESH_AT; + return lerp(SESH_A, SESH_B, span > 0 ? (x - SESH_AT) / span : 0); +} + export function Wordmark() { return ( diff --git a/src/cli/index.tsx b/src/cli/index.tsx index 1021d70..13dd6e1 100644 --- a/src/cli/index.tsx +++ b/src/cli/index.tsx @@ -1,6 +1,6 @@ #!/usr/bin/env node /** - * SSOmatic - Interactive TUI for managing AWS SSO credentials + * awssesh - Interactive TUI for managing AWS SSO credentials */ import React, { useState, useEffect, useCallback, useMemo } from "react"; @@ -176,7 +176,7 @@ function LoginPrompt({ profile, deviceAuth, authError = false, copied = false, a // Main Component // ───────────────────────────────────────────────────────────────────────────── -function SSOmatic() { +function Awssesh() { const { exit } = useApp(); const [view, setView] = useState("dashboard"); @@ -382,7 +382,7 @@ function SSOmatic() { // Loading / seeding state. if (seeding && profiles.length === 0) { return ( - exit()}> + exit()}> ); @@ -391,7 +391,7 @@ function SSOmatic() { // No profiles found. if (!seeding && ssoProfiles.length === 0 && profiles.length === 0) { return ( - exit()}> + exit()}> No SSO profiles found in ~/.aws/config ); @@ -400,7 +400,7 @@ function SSOmatic() { // Login overlay takes precedence over the active view. if (pendingLogin) { return ( - exit()}> + exit()}> exit()}> + exit()}> setView("dashboard")} /> ); @@ -425,7 +425,7 @@ function SSOmatic() { if (profile) { const sso = findProfile(detailName); return ( - exit()}> + exit()}>
print export AWS_* lines for eval $(...) - ssomatic --version + awssesh launch the interactive TUI + awssesh status print profile statuses and exit + awssesh refresh [name] refresh a profile (or all favorites) now + awssesh export print export AWS_* lines for eval $(...) + awssesh --version `; async function launchTui(): Promise { - const instance = renderApp(); + const instance = renderApp(); // Always terminate promptly on quit; the in-process auto-refresh interval is // cleared on unmount, so there are no lingering handles. await instance.waitUntilExit(); @@ -487,7 +487,7 @@ async function main(): Promise { const parsed = parseArgs(process.argv.slice(2)); switch (parsed.kind) { case "version": - process.stdout.write(`ssomatic v${VERSION}\n`); + process.stdout.write(`awssesh v${VERSION}\n`); return; case "help": process.stdout.write(HELP); diff --git a/src/version.ts b/src/version.ts index acfbef7..9dda9b1 100644 --- a/src/version.ts +++ b/src/version.ts @@ -7,7 +7,7 @@ import pkg from "../package.json"; export const VERSION = pkg.version; -const GITHUB_REPO = "tux86/ssomatic"; +const GITHUB_REPO = "tux86/awssesh"; const CHECK_INTERVAL = 6 * 60 * 60 * 1000; // 6 hours let cachedLatest: string | null = null;