Skip to content

chore(deps): bump @eslint/js from 9.39.1 to 10.0.1 in /frontend#285

Open
dependabot[bot] wants to merge 1030 commits intomainfrom
dependabot/npm_and_yarn/frontend/eslint/js-10.0.1
Open

chore(deps): bump @eslint/js from 9.39.1 to 10.0.1 in /frontend#285
dependabot[bot] wants to merge 1030 commits intomainfrom
dependabot/npm_and_yarn/frontend/eslint/js-10.0.1

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Feb 16, 2026

Bumps @eslint/js from 9.39.1 to 10.0.1.

Release notes

Sourced from @​eslint/js's releases.

v10.0.0

Breaking Changes

  • f9e54f4 feat!: estimate rule-tester failure location (#20420) (ST-DDT)
  • a176319 feat!: replace chalk with styleText and add color to ResultsMeta (#20227) (루밀LuMir)
  • c7046e6 feat!: enable JSX reference tracking (#20152) (Pixel998)
  • fa31a60 feat!: add name to configs (#20015) (Kirk Waiblinger)
  • 3383e7e fix!: remove deprecated SourceCode methods (#20137) (Pixel998)
  • 501abd0 feat!: update dependency minimatch to v10 (#20246) (renovate[bot])
  • ca4d3b4 fix!: stricter rule tester assertions for valid test cases (#20125) (唯然)
  • 96512a6 fix!: Remove deprecated rule context methods (#20086) (Nicholas C. Zakas)
  • c69fdac feat!: remove eslintrc support (#20037) (Francesco Trotta)
  • 208b5cc feat!: Use ScopeManager#addGlobals() (#20132) (Milos Djermanovic)
  • a2ee188 fix!: add uniqueItems: true in no-invalid-regexp option (#20155) (Tanuj Kanti)
  • a89059d feat!: Program range span entire source text (#20133) (Pixel998)
  • 39a6424 fix!: assert 'text' is a string across all RuleFixer methods (#20082) (Pixel998)
  • f28fbf8 fix!: Deprecate "always" and "as-needed" options of the radix rule (#20223) (Milos Djermanovic)
  • aa3fb2b fix!: tighten func-names schema (#20119) (Pixel998)
  • f6c0ed0 feat!: report eslint-env comments as errors (#20128) (Francesco Trotta)
  • 4bf739f fix!: remove deprecated LintMessage#nodeType and TestCaseError#type (#20096) (Pixel998)
  • 523c076 feat!: drop support for jiti < 2.2.0 (#20016) (michael faith)
  • 454a292 feat!: update eslint:recommended configuration (#20210) (Pixel998)
  • 4f880ee feat!: remove v10_* and inactive unstable_* flags (#20225) (sethamus)
  • f18115c feat!: no-shadow-restricted-names report globalThis by default (#20027) (sethamus)
  • c6358c3 feat!: Require Node.js ^20.19.0 || ^22.13.0 || >=24 (#20160) (Milos Djermanovic)

Features

  • bff9091 feat: handle Array.fromAsync in array-callback-return (#20457) (Francesco Trotta)
  • 290c594 feat: add self to no-implied-eval rule (#20468) (sethamus)
  • 43677de feat: fix handling of function and class expression names in no-shadow (#20432) (Milos Djermanovic)
  • f0cafe5 feat: rule tester add assertion option requireData (#20409) (fnx)
  • f7ab693 feat: output RuleTester test case failure index (#19976) (ST-DDT)
  • 7cbcbf9 feat: add countThis option to max-params (#20236) (Gerkin)
  • f148a5e feat: add error assertion options (#20247) (ST-DDT)
  • 09e6654 feat: update error loc of require-yield and no-useless-constructor (#20267) (Tanuj Kanti)

Bug Fixes

  • 436b82f fix: update eslint (#20473) (renovate[bot])
  • 1d29d22 fix: detect default this binding in Array.fromAsync callbacks (#20456) (Francesco Trotta)
  • 727451e fix: fix regression of global mode report range in strict rule (#20462) (ntnyq)
  • e80485f fix: remove fake FlatESLint and LegacyESLint exports (#20460) (Francesco Trotta)
  • 9eeff3b fix: update esquery (#20423) (cryptnix)
  • b34b938 fix: use Error.prepareStackTrace to estimate failing test location (#20436) (Francesco Trotta)
  • 51aab53 fix: update eslint (#20443) (renovate[bot])
  • 23490b2 fix: handle space before colon in RuleTester location estimation (#20433) (Francesco Trotta)
  • f244dbf fix: use MessagePlaceholderData type from @eslint/core (#20348) (루밀LuMir)
  • d186f8c fix: update eslint (#20427) (renovate[bot])
  • 2332262 fix: error location should not modify error message in RuleTester (#20421) (Milos Djermanovic)
  • ab99b21 fix: ensure filename is passed as third argument to verifyAndFix() (#20405) (루밀LuMir)
  • 8a60f3b fix: remove ecmaVersion and sourceType from ParserOptions type (#20415) (Pixel998)
  • eafd727 fix: remove TDZ scope type (#20231) (jaymarvelz)

... (truncated)

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

karanhudia and others added 30 commits January 25, 2026 01:49
BREAKING PRIVACY FIX: Previously, matomo.js was loaded unconditionally
on every page load, even when users opted out. This violated GDPR/privacy
principles and was reported in GitHub issues.

Changes:
1. Deferred initialization - no longer loads matomo.js on app startup
2. Privacy-first defaults - no tracking unless explicitly enabled:
   - Login page (no auth token): NO tracking
   - API fetch errors: NO tracking
   - Network errors: NO tracking
3. Re-check preferences after login (useEffect depends on isAuthenticated)
4. Removed duplicate disableCookies() and setDoNotTrack() calls
5. Only initialize tracking if analytics_enabled=true in user preferences

Privacy guarantees:
- Login page never loads matomo.js or sends tracking events
- If user opts out, NO matomo.js script is loaded on any page
- If user opts out, NO network requests to analytics server
- Script only loads after successful login AND analytics_enabled=true
- trackOptOut() and trackConsentResponse() only work if already initialized

User flow:
1. Login page → No token → userOptedOut=true → NO tracking
2. After login → Fetch preferences from API
3. If analytics_enabled=true → initMatomoIfEnabled() loads matomo.js
4. If analytics_enabled=false → Nothing loads
5. User can toggle preference anytime via Settings → Preferences

Technical details:
- initMatomoScript() made internal, replaced with initMatomoIfEnabled()
- Added matomoInitialized flag to prevent duplicate script loading
- loadUserPreference() defaults to userOptedOut=true on all errors
- useEffect in App.tsx runs on isAuthenticated change, not just mount

Fixes GitHub issue where users saw requests to analytics.nullcodeai.dev
even with "Enable analytics" unchecked.

Also fixes Matomo console warning: "The method disableCookies is registered
more than once in _paq variable. Only the last call has an effect."

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Major improvements to cron schedule management:

**New Components:**
- CronBuilder: Visual cron expression builder with 6 frequency types
  (minute, hourly, daily, weekly, monthly, custom)
- CronBuilderDialog: Dialog wrapper with clock icon trigger
- Added comprehensive unit tests for CronBuilder

**Timezone Fixes:**
- Fixed hourly intervals to run at clean local times instead of odd :30 minutes
- Converts hourly intervals (*/8) to specific UTC hours (2,10,18) for proper
  timezone handling
- Backend runs in UTC, frontend shows local time consistently
- Fixed double-conversion bugs that caused time shifts on edit

**UI Improvements:**
- Removed hardcoded formatCronExpression lookup table (only worked for 10 patterns)
- Removed redundant helper text below cron inputs
- Table now shows raw cron expression in monospace font
- CronBuilder preview shows human-readable description at bottom of dialog

**Tests Added:**
- End-to-end user experience tests verifying what users enter vs when jobs run
- Hourly interval conversion tests (*/8 → specific hours)
- Round-trip conversion tests ensuring edit shows original values
- Day-of-week adjustment tests for timezone boundary crossing

**Files Changed:**
- Removed: CronPickerField.tsx (replaced by CronBuilder)
- Updated: dateUtils.ts with hourly interval timezone logic
- Updated: Schedule.tsx and ScheduledChecksSection.tsx to use new components

Fixes issues where:
- "Every 8 hours at :00" showed runs at 3:30 AM instead of 12 AM, 8 AM, 4 PM
- Editing schedules caused time to shift by timezone offset
- Helper text showed wrong/confusing cron expressions

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…hive paths

- Fix missing Repository import in backup.py
- Add source_ssh_connection_id to repository API responses
- Use relative paths for SSHFS mounts to avoid ugly /tmp/sshfs_mount_xxx/ in archives
- List actual directory contents instead of backing up "." to remove dot entry from archives
- Improve CommandPreview with step-by-step UI showing mount, backup, and cleanup steps
- Fix RepositoryWizard to properly initialize remote data source selection when editing
- Add SSH prefix display (user@host:port:) in old repository form for remote sources
- Fix wizard content height to prevent jumping between steps

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
The LC_ALL=C prefix broke Hetzner Storage Box because their restricted
shell doesn't support environment variable assignment. Now the code:

- Tries with LC_ALL=C first (works for normal Linux systems)
- Falls back to plain df for restricted shells
- Uses smarter header detection by checking if second column is numeric
  (works for any language: English, German, etc.)

Adds 18 comprehensive tests for _run_df_command and collect_storage_info.

Co-Authored-By: Claude <noreply@anthropic.com>
- Refactor RepositoryWizard to use step names instead of indices
- Add required prop to SourceDirectoriesInput for optional source dirs in observe mode
- Add comprehensive test suite (59 tests) covering:
  - Create mode (all 5 steps)
  - Import mode (full repository)
  - Import mode (observability only)
  - Edit mode
  - SSH connection handling
  - Navigation

Co-Authored-By: Claude <noreply@anthropic.com>
- Repository health now based solely on backup status
- Check/compact warnings moved to maintenance alerts (not health indicators)
- Dashboard shows both unhealthy and healthy repos (up to 4 total)
- Unhealthy repos shown first, remaining slots filled with healthy repos
- Fix last_stats_refresh time format using serialize_datetime

Co-Authored-By: Claude <noreply@anthropic.com>
- Add tests for 12 new components (642 total tests)
- Improve branch coverage from 75% to 82%
- Exclude api.ts from coverage (low-value API wrappers)
- New test files: AnalyticsConsentBanner, CheckWarningDialog,
  CompactWarningDialog, CompressionSettings, CronBuilder,
  CronBuilderDialog, ExcludePatternInput, LockErrorDialog,
  PathSelectorField, RemoteMachineCard, RepositoryCell,
  SourceDirectoriesInput, matomo

Co-Authored-By: Claude <noreply@anthropic.com>
Scripts now receive backup context via environment variables:
- BORG_UI_BACKUP_STATUS: success/failure/warning (post-backup only)
- BORG_UI_REPOSITORY_NAME: Repository name
- BORG_UI_REPOSITORY_PATH: Repository path
- BORG_UI_REPOSITORY_ID: Repository ID
- BORG_UI_HOOK_TYPE: pre-backup or post-backup
- BORG_UI_JOB_ID: Backup job ID

This enables conditional actions in scripts based on backup result.

Co-Authored-By: Claude <noreply@anthropic.com>
Add session-scoped event_loop fixture with proper cleanup to prevent
"Event loop is closed" RuntimeError annotations in CI. Also adds
warning filters to suppress asyncio subprocess transport warnings
during test cleanup - a known Python 3.9+ issue.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
Add BORG_RELOCATED_REPO_ACCESS_IS_OK=yes environment variable to all
borg command invocations. This fixes the error when importing a
repository that was previously located at a different path.

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Claude <noreply@anthropic.com>
- Add showSshMountPoints prop to FileExplorerDialog to hide SSH mount points
- Add allowedSshConnectionId prop to filter specific SSH connections
- Hide local paths when SSH source is selected and vice versa
- Disable data source cards (Local/Remote) when directories are already selected
- Show SSH prefix indicator for remote source directories immediately
- Add source_connection_id support to old repository form for remote-to-local
- Reset selection state when FileExplorerDialog reopens
- Add comprehensive tests for new functionality

Co-Authored-By: Claude <noreply@anthropic.com>
…nsive tests

- Extract wizard step components into src/components/wizard/:
  - WizardStepLocation: Repository name, location (local/SSH), path selection
  - WizardStepDataSource: Data source selection with remote-to-remote blocking
  - WizardStepSecurity: Encryption, passphrase, keyfile handling
  - WizardStepBackupConfig: Compression, exclude patterns, advanced options
  - WizardStepReview: Configuration summary and command preview
  - WizardStepIndicator: Step navigation with completion state
  - BackupFlowPreview: Visual diagram of backup data flow

- Extract dialogs from Repositories.tsx:
  - PruneRepositoryDialog: Repository pruning with retention policies
  - RepositoryInfoDialog: Repository details and storage statistics

- Add comprehensive test coverage for all new components (831 tests total)
  - Tests for remote-to-remote blocking behavior
  - Tests for local-to-remote and remote-to-local (SSHFS) workflows
  - Tests for SSH connection handling and validation

- Remove beta toggle for new wizard from Settings (now default)
- Significant cleanup of Repositories.tsx

Co-Authored-By: Claude (claude-opus-4-5) <noreply@anthropic.com>
- Add passphrase field to Repository and RepositoryData interfaces
- Allow null for custom_flags field (matches API response)
- Fix ssh_key_id to allow null when not set
- Make Repository extend RepositoryData in Repositories.tsx

Co-Authored-By: Claude (claude-opus-4-5) <noreply@anthropic.com>
…emote-to-remote prevention

Fixes two critical issues in repository editing:

1. Repository type not updating when switching from local to SSH
   - Added missing fields to RepositoryUpdate model (repository_type, host, port, username, ssh_key_id, connection_id)
   - Backend now properly updates repository type and SSH connection details
   - Test: test_update_repository_type_local_to_ssh

2. Source connection not clearing when switching from remote to local
   - Frontend now explicitly sets source_connection_id to null for local sources
   - Backend uses model_dump(exclude_unset=True) to distinguish null from unset
   - WizardStepDataSource clears sourceSshConnectionId when directories are removed
   - Test: test_update_repository_clear_source_connection_id

3. Remote location disabled when data source is remote (prevents remote-to-remote)
   - WizardStepLocation now receives dataSource and sourceSshConnectionId props
   - SSH repository card disabled in edit mode when backing up from remote machine
   - Clear info alert explains why remote-to-remote is not supported
   - Test: enables Borg UI Server when remote directories are deleted

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
karanhudia and others added 28 commits February 17, 2026 16:26
Adds isAdmin check to break lock feature for improved security:
- BackupJobsTable: Only show Break Lock action button to admin users
- LockErrorDialog: Disable Break Lock button for non-admin users with
  explanatory tooltip

This prevents non-admin users from breaking repository locks, which
could disrupt ongoing backup/restore operations.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.10.1 to 25.2.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 25.2.3
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Karan Hudia <karanhudia@gmail.com>
Discord and other chat services auto-detect @username patterns in SSH URLs,
causing unintended user mentions. This fix removes usernames from SSH URLs
when displaying them in notification Location fields.

Changes:
- Add _sanitize_ssh_url() helper to remove username from SSH URLs
- Apply sanitization to all notification Location displays (12 occurrences)
- Add comprehensive tests for SSH URL sanitization
- Test all notification scenarios (backup start/success/failure, restore success/failure)
- Verify local paths remain unchanged

Example:
Before: ssh://u331525@host.com:23/path → Discord mentions @u331525
After:  ssh://host.com:23/path → No mention

Note: JSON data still contains full URL with username for automation tools.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Fix unused variable warning in LockErrorDialog test
- Fix eslint-disable placement for any type in Repositories.tsx

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Changes in this release:
- Admin-only restriction for lock breaking functionality
- Fix Discord @ mentions in SSH repository notifications

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…estore preview paths

- Show original/custom location radio buttons for SSH destinations once a
  connection is selected (previously only shown for local destinations)
- SSH connection selector now renders before the strategy options so the
  flow reads top-to-bottom naturally
- Original location description adapts to mention the remote machine for SSH
- Unified path input: custom path field shown for any destination type when
  custom strategy is selected, removing the separate SSH-only path input
- Simplified canProceed() validation: require customPath only when custom
  strategy is selected, regardless of destination type
- Fix restore preview in review step: custom strategy now shows the full
  archive path under the custom destination (e.g. /mnt/disk/home/user/file)
  instead of only the last path component, matching actual borg extract behaviour
- Remove dead else-if branch in getDestinationPath that was unreachable
  after the strategy/destination type unification

Co-Authored-By: Claude <noreply@anthropic.com>
- Replace childish intro line with a direct one-liner
- Split Docker Compose section into three explicit options: no Redis,
  bundled Redis, and external Redis — each a complete copy-paste config
  so users never need to manually add or remove sections
- Option 3 (external Redis) now includes both the Redis-only compose for
  the Redis machine and the borg-ui compose that connects to it
- Add upfront explanation of /local (source data) vs backup repositories
  (configured in the UI) to resolve the most common new-user confusion
- Inline PUID/PGID and TZ hints directly in compose comments so users
  see them at the point of action, not buried in Customization
- Remove version: '3.8' (deprecated in Compose v2)
- Fix stale /mnt/backup-source reference in Customization section
- Standardise permission instructions on id -u && id -g throughout

Co-Authored-By: Claude <noreply@anthropic.com>
Replace the incorrect "container automatically mounts your host filesystem
at /local" claim with an accurate explanation: mounts contain exactly what
the user configured in docker-compose volumes, named however they like.
Add a practical multi-drive example showing /photos, /nas, /external with
LOCAL_MOUNT_POINTS so the file browser discovers all of them. Remove the
"entire filesystem mounted by default" line and the confusing overlapping
/local sub-path example.

Co-Authored-By: Claude <noreply@anthropic.com>
Without this, disableCookies() caused every page load to generate a
fresh random visitor ID, making unique-user counts meaningless.

Each browser/installation gets a random UUID on first visit, persisted
in localStorage as borg_ui_install_id. The Matomo user ID is then
hash(installId + username), which is stable across sessions and unique
across separate borg-ui instances — even when all users are named "admin".

No resetUserId on logout: the same deterministic hash is set again on
next login, so resetting just creates a pointless anonymous gap.

Co-Authored-By: Claude <noreply@anthropic.com>
…ions/download-artifact-7

ci(deps): bump actions/download-artifact from 4 to 7
…er-evans/dockerhub-description-5

ci(deps): bump peter-evans/dockerhub-description from 4 to 5
chore(deps): bump gunicorn from 23.0.0 to 25.1.0
chore(deps): bump croniter from 1.4.1 to 6.0.0
Bumps [ajv](https://github.com/ajv-validator/ajv) from 6.12.6 to 6.14.0.
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](ajv-validator/ajv@v6.12.6...v6.14.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [psutil](https://github.com/giampaolo/psutil) from 5.9.6 to 7.2.2.
- [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst)
- [Commits](giampaolo/psutil@release-5.9.6...release-7.2.2)

---
updated-dependencies:
- dependency-name: psutil
  dependency-version: 7.2.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [bcrypt](https://github.com/pyca/bcrypt) from 4.0.1 to 5.0.0.
- [Changelog](https://github.com/pyca/bcrypt/blob/main/CHANGELOG.rst)
- [Commits](pyca/bcrypt@4.0.1...5.0.0)

---
updated-dependencies:
- dependency-name: bcrypt
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
chore(deps): bump psutil from 5.9.6 to 7.2.2
chore(deps): bump pytest-cov from 4.1.0 to 7.0.0
chore(deps): bump structlog from 23.2.0 to 25.5.0
…end/ajv-6.14.0

chore(deps): bump ajv from 6.12.6 to 6.14.0 in /frontend
chore(deps): bump redis from 5.0.1 to 7.1.1
chore(deps): bump bcrypt from 4.0.1 to 5.0.0
…end/jsdom-28.1.0

chore(deps-dev): bump jsdom from 27.0.1 to 28.1.0 in /frontend
@github-actions
Copy link

🔒 Security Scan Results

Commit: 5b137d9

Check Status
Frontend (npm audit) ❌ FAILED
Backend (pip-audit) ❌ FAILED
Filesystem (Trivy) ✅ PASSED

📊 See workflow artifacts for detailed reports.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file major-update needs-review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants