Commit Graph

45 Commits

Author SHA1 Message Date
Nicolas Meienberger
62cdf5dcca fix(backup-config): throw if include patterns have un-supported characters 2026-06-01 20:14:12 +02:00
Nico
00d1dac515 fix(backup-config): throw if include patterns have un-supported chars (#931) 2026-06-01 20:02:07 +02:00
Nico
8fedeef4d1 feat: add restore agent RPC foundation (#929)
* feat: add restore agent RPC foundation

* chore: temp event handlers

* refactor: export restore progress from dto file
2026-05-31 19:39:20 +02:00
Nico
0a2c6bca0c refactor(restic): auto try to unlock and remove stale locks (#926) 2026-05-30 13:21:22 +02:00
Nico
d4436b0cdc refactor(restic): all commands return effects (#924)
* refactor(restic): all commands are effects

* fix(restic): preserve effect failure errors

* chore: pr feedbacks
2026-05-30 10:10:54 +02:00
Nicolas Meienberger
d502b96509 test: fix webhook mocks 2026-05-29 20:45:16 +02:00
Nico
7b5c53bb7d fix(sftp): allow legacy ssh rsa to add support for older servers (#921)
* refactor(e2e): use more stable assertion

* feat(sftp): add legacy ssh-rsa option
2026-05-27 21:19:23 +02:00
Nico
20d202c20e fix(core): enforce webhook timeout (#920) 2026-05-27 20:35:01 +02:00
Nico
11dacd7c71 refactor(agent): store SFTP volume keys in tmp (#888)
* refactor(agent): store SFTP volume keys in tmp

* refactor: store temp keys in /run/zerobyte subfolders

* fix(restic): clean temp secrets dir on env setup failure

* fix: one secrets temp dir per env building
2026-05-17 18:19:09 +02:00
Nico
19a0781667 test: backend integration (#889)
* test: backend integration

* docs: mounted shares acls

* feat: smb expose real ACLs when available

* fix: re-init repo on setup

* chore: add missing @hono/standard-validator package

* chore: add happy-dom dev dep
2026-05-17 15:18:56 +02:00
renovate[bot]
0dccd00539 fix(deps): update bun minor and patch dependencies (#867)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-05-17 13:54:02 +02:00
renovate[bot]
5e4742488f fix(deps): update bun minor and patch dependencies (#865)
* fix(deps): update bun minor and patch dependencies

* fix: ci

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-05-07 17:11:53 +02:00
Nicolas Meienberger
3c7eb65c7c chore(package-core): remove lock 2026-05-07 09:17:46 +02:00
Nico
e65a135676 feat(agents): create agent registry and service (#849)
* feat(agents): create agent registry and service

* fix: mark agent offline only if the session was removed properly

* refactor: centralize agent backup lifecycle state

* refactor: simplify session management

* refactor: move effect / async boundary in one place

* chore: regen migration

* refactor: improve error handling

* chore: pr feedback
2026-05-05 19:34:10 +02:00
Nicolas Meienberger
e981211a2d fix(notifications): validate webhook headers and show delivery health 2026-05-05 10:24:20 +02:00
Nicolas Meienberger
8772d4796e feat(backups): configure backup webhook timeout 2026-05-04 07:52:21 +02:00
Nicolas Meienberger
38f5a669ae fix(core): preserve significant path whitespace 2026-05-04 07:19:57 +02:00
Nicolas Meienberger
7be7c9edae test(e2e): fix waiting on transitive state 2026-05-03 20:51:43 +02:00
Nico
220e2d2801 feat: make webhook calls trusted only (#848)
* feat: make webhook calls trusted only

* fix: pr feedbacks
2026-04-30 22:14:22 +02:00
Nico
11e9fbcc44 feat: pre/post backup webhooks (#835)
* feat: pre/post backup webhooks

* fix(hooks): run post when cancelled

* refactor(webhooks): headers as array

* refactor: pr feedback

* refactor: simplify hooks ceremonies

* chore: pr feedbacks

* chore: re-gen migration
2026-04-29 23:48:58 +02:00
Nico
e506047415 test: add property-based tests with fast-check (#832) 2026-04-25 09:35:28 +02:00
Nicolas Meienberger
7b3b7583c0 chore: improve sanitize function to catch escaped characters 2026-04-25 09:30:16 +02:00
Nico
e2c9ef0518 chore: fixed unused types (#824) 2026-04-22 22:04:46 +02:00
Eric Hess
d2f65716fe feat(mirrors): add selective snapshot sync to mirror repositories (#755)
* feat(mirrors): add selective snapshot sync to mirror repositories

Allow users to sync missing snapshots from the source repository to a
mirror. A new sync button per mirror opens a dialog showing which
snapshots are missing, with checkboxes to select which ones to copy.

- Add GET /:shortId/mirrors/:mirrorShortId/status endpoint to compare
  snapshots between source and mirror repositories
- Add POST /:shortId/mirrors/:mirrorShortId/sync endpoint accepting
  selected snapshotIds in the request body
- Extend restic copy command to accept multiple snapshotIds
- Add sync preview dialog with snapshot selection to the frontend

* refactor: stylistic changes

---------

Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-04-16 21:28:48 +02:00
Nicolas Meienberger
95006a7471 chore(core package): re-organize files 2026-04-16 19:07:11 +02:00
Nico
4520335ebc fix(rclone): pass explicitly the RCLONE_CONF env var (#779) 2026-04-12 09:25:57 +02:00
Nico
863fbfc5cc fix(snapshots): use streamed response to avoid 1 MiB buffer limit on large repos (#771) 2026-04-09 23:47:36 +02:00
Nico
8a4a06f888 chore: migrate toolchain to vite-plus (#762)
* chore: migrate toolchain to vite-plus

* chore: run lint with bunx

* chore: add vp config postinstall
2026-04-09 17:57:19 +02:00
Nico
c371676ad0 feat(agent): add standalone agent runtime (#761)
* feat(agent): add standalone agent runtime

* fix(backups): bridge local executor to Effect restic API

* fix(agent): add Bun and DOM types to agent tsconfig

* refactor: wrap backup error in a tagged effect error

* fix: pr feedbacks
2026-04-08 20:47:15 +02:00
renovate[bot]
7add3dd517 chore(deps): update dependency typescript to v6 (#732)
* chore(deps): update dependency typescript to v6

* chore: fix bun types in core package

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Nicolas Meienberger <github@thisprops.com>
2026-04-04 17:34:25 +02:00
Nico
4305057185 test: move test runner from Bun to Vitest (#727)
* chore: migrate to vitest

* test: speed up some suites by sharing sessions and mocking expensive non-tested actions

* test: refactor some tests to verify behavior instead of implementation details

* chore: fix linting issues
2026-04-01 20:05:54 +02:00
Nicolas Meienberger
3acf565ccd fix: force user to provide known hosts values in sftp volume / repository creation 2026-03-31 20:27:48 +02:00
Nico
2a219ac042 refactor(backups): consolidate execution into service helpers (#717) 2026-03-29 12:57:47 +02:00
Nicolas Meienberger
dd1aca7e30 test(backup): ensure warning details are returned 2026-03-22 11:06:38 +01:00
Nico
05dd440dea fix(restic): separate error summary from diagnostic details (#694) 2026-03-21 20:50:23 +01:00
Nico
fa8e57a589 fix: close read line interfaces on spawn errors (#693) 2026-03-21 20:46:22 +01:00
Nico
3c9620f973 fix(rclone): correctly propagate RCLONE_NO_CHECK_CERTIFICATE env variable (#692)
Closes #688
2026-03-21 20:42:22 +01:00
Nico
a039bb478e fix: separate raw include paths and patterns (#683)
Separate include patters and included path cleanly to avoid path with special characters to be expanded. Closes https://github.com/nicotsx/zerobyte/discussions/680

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

* **New Features**
  * Added ability to select specific directories and paths for inclusion in backup schedules, separate from pattern-based rules.

* **Bug Fixes & Improvements**
  * Automatically migrates existing backup configurations to work with the new path selection system.
  * Enhanced backup restoration to properly handle both selected paths and pattern-based inclusions.

* **Chores**
  * Updated database schema to support path selections in backup schedules.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-03-20 19:27:54 +01:00
Nico
429b69ec92 fix: show back warnings logs and surface in UI (#677)
fix: show back warnings logs and surface in UI

#544

chore: fix dev login issue
2026-03-18 20:21:14 +01:00
Nico
7473c29948 feat: protect restores that would overwrite important internal path (#663) 2026-03-13 21:33:37 +01:00
Nicolas Meienberger
bb7d650bcd chore: default values in schemas 2026-03-12 22:34:00 +01:00
Nicolas Meienberger
469f0d6c4e fix(dump): content-disposition header with special characters 2026-03-12 19:17:32 +01:00
Nicolas Meienberger
b132ad6df5 fix: add additional chmod after file write
Closes #478 The mode option of fs.writeFile does not reliably apply
permissions on all filesystems. On Synology NAS Docker volumes (btrfs),
the file ends up with 0755 permissions instead of 0600, causing SSH to
refuse the key.
2026-03-12 18:01:45 +01:00
Nicolas Meienberger
a1b2d97dbc fix(restic): treat all flag-like snap id args as positional args 2026-03-12 18:01:33 +01:00
Nico
332e5bffda refactor: extract restic in core package (#651)
* refactor: extract restic in core package

* chore: add turbo task runner

* refactor: split server utils

* chore: simplify withDeps signature and fix non-null assertion
2026-03-11 21:56:07 +01:00