Skip to content

Releases: saltbo/zpan

v2.9.0

Choose a tag to compare

@github-actions github-actions released this 30 Aug 06:51

💥 BREAKING CHANGES

  • due to ad0f21b - unify list pagination and realtime updates (PR #524 by @saltbo):

    migrated list APIs now accept pageToken and return nextPageToken instead of page and total fields.
    Refs #450

    • fix: keep page tokens at the HTTP boundary
      Move signed page-token handling out of the pure domain layer so dependency-cruiser architecture checks pass without changing behavior.
    • fix: route background job stats through usecase
      Keep the HTTP boundary from reaching directly into repository ports and cover the new usecase wrapper.
    • fix: align clients and checks with cursor pagination
    • refactor: unify pagination boundaries and infinite loading
  • due to a5c281b - make site routes RESTful (PR #526 by @saltbo):

    site email, branding, analytics, licensing, WebDAV verification, and scheduler endpoint paths have changed.

  • due to 17db813 - normalize persistent identifiers to Base62 (PR #554 by @saltbo):

    historical ZPan-owned IDs and public tokens require the one-time normalization migration; old public links and stored credentials are invalidated without runtime fallback.

    • fix(ids): namespace public redirect tokens
      Generate share tokens as s plus 11 Base62 characters and image tokens as i plus 11 Base62 characters. Dispatch /r by namespace prefix, reuse the single resolved record, and update migration validation, contracts, documentation, and tests.
    • fix(ids): guard future object storage keys
    • fix(ids): normalize historical references safely

✨ New Features

🐛 Bug Fixes

Read more

v2.8.3

Choose a tag to compare

@github-actions github-actions released this 30 Aug 02:36

🐛 Bug Fixes

  • b4fea06 - authz: restrict workspace job controls to editors
  • 0cc4cfd - docker: refresh GeoIP database source

♻️ Refactors

  • 6c4c712 - authz: centralize downloader credential policy

👷 Build System

  • fb41a71 - deps: resolve release audit advisories

🔧 Chores

Docker

docker pull ghcr.io/saltbo/zpan:v2.8.3
docker pull ghcr.io/saltbo/zpan:v2.8.3-cli

v2.8.2

Choose a tag to compare

@github-actions github-actions released this 03 Aug 06:07

🐛 Bug Fixes

  • 1fa7ab4 - security: block IPv6 transition SSRF bypasses (commit by @saltbo)
  • 8325133 - security: escape user input in notification emails (commit by @saltbo)

👷 Build System

🔧 Chores

Docker

docker pull ghcr.io/saltbo/zpan:v2.8.2
docker pull ghcr.io/saltbo/zpan:v2.8.2-cli

v2.8.1

Choose a tag to compare

@github-actions github-actions released this 24 Jul 21:40

⚡ Performance Improvements

  • 07fb7c3 - database: reduce D1 write amplification (commit by @saltbo)

🔧 Chores

Docker

docker pull ghcr.io/saltbo/zpan:v2.8.1
docker pull ghcr.io/saltbo/zpan:v2.8.1-cli

v2.8.0

Choose a tag to compare

@github-actions github-actions released this 24 Jul 17:52

💥 BREAKING CHANGES

  • due to b3ba6c0 - unify errors to AIP-193 + Page pagination, enrich access log (#443) (PR #444 by @saltbo):

    unify errors to AIP-193 + Page pagination, enrich access log (#443) (#444)

  • due to 8abca2f - unify error handling on typed AppError + single jsonError renderer (PR #445 by @saltbo):

    POST /shares/{token}/objects quota rejection now returns 422
    (was an inconsistent 400); every other quota path already returned 422.

  • due to 7d819a5 - move admin user management to better-auth admin plugin (PR #446 by @saltbo):

    move admin user management to better-auth admin plugin (#446)

  • due to 2ae603b - DELETE endpoints return 204 No Content (#443) (PR #447 by @saltbo):

    all DELETE endpoints now respond 204 with no body. License
    unbind no longer returns cloud_unbind_error, so a partial cloud-unbind failure
    is no longer surfaced in the response body.
    Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

    • fix(licensing): surface cloud-unbind failure as 502, don't swallow it as 204
      The DELETE→204 sweep turned license unbind into an unconditional 204, which
      hid a real partial failure: when the best-effort cloud unbind throws, the local
      binding is cleared but the cloud side is left dangling. Reporting 204 (success)
      in that case swallows the error.
      unbindLicense now returns a Result — { ok: true } only when the cloud unbind
      also succeeds, and a 502 AppError (reason CLOUD_UNBIND_FAILED, the cloud error
      in details.metadata) when it fails. The local binding is still cleared either
      way; the handler returns 204 on ok and throws the error otherwise.
      DELETE success is still an empty 204 — this only restores fail-fast on the one
      endpoint whose failure was a soft body field, never a thrown error.
      Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
    • test(spec): reconcile users.feature with #446 better-auth migration
      pnpm lint:spec (a CI gate) was red on 11 orphaned spec/users.feature
      scenarios — leftover from #446, which moved admin user management off our
      /api/users/* routes onto better-auth's admin plugin and deleted the old
      endpoints/tests but not their spec scenarios. Pre-existing on main; surfaced
      here as the only failing CI check.
      Reconcile the spec with reality:
    • Re-link the behaviors that survived (now via better-auth) to the tests that
      already cover them: list / admin-only(403) / disable(ban) / delete(remove) /
      patch-missing(act-on-missing→404) → admin-users-ba.integration.test.ts;
      quota-personal-org → the per-user quota test in users.integration.test.ts.
    • Drop scenarios for behavior that no longer exists: batch-toggle (now a
      client-side fan-out, no endpoint), invalid-status (ban/unban are explicit),
      multi-field filter (better-auth search is single-field, untested), the
      unauthenticated 401 guard (better-auth owns it), and the inline
      quota-entitlements-in-list (quota is now a per-user sub-resource).
      lint:spec: 413 scenarios, all covered.
      Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

  • due to 78e2550 - unify revoke/cancel on PUT /{resource}/{id}/status (#452) (PR #453 by @saltbo):

    unify revoke/cancel on PUT /{resource}/{id}/status (#452) (#453)

  • due to 7b8c8c9 - unify object upload + rework delete/trash lifecycle (#448) (PR #454 by @saltbo):

    • removes PUT /objects/{id}/status and POST /objects/{id}/uploads
    • PUT .../uploads/{sid}/status -> POST .../uploads/{sid}/completions {parts}
    • DELETE /objects/{id} flips hard-purge -> soft-delete; permanent purge
      moves to DELETE /trash/objects/{id}
    • DELETE /trash removed; restore is POST /trash/objects/{id}/restorations
    • matters.status enum loses 'trashed' (migration backfills to trashedAt)
      The migration swaps the matters_active_name_uniq partial index to exclude
      trashed rows (WHERE status='active' AND trashed_at IS NULL). The single-PUT
      presign is header-free so the uniform slice uploader's raw PUT matches the
      S3 signature. Go downloader client + agent reworked to the unified flow.
  • due to 63d5b45 - collapse polymorphic GET responses to one monomorphic schema (#449) (PR #455 by @saltbo):

    collapse polymorphic GET responses to one monomorphic schema (#449) (#455)

  • due to 0550e41 - make landing shares public by default (commit by @saltbo):

    showOnProfile, listedAt, and the profile-listing endpoints are replaced by private and PUT /api/shares/:token/privacy.

✨ New Features

  • 5836789 - spaces, quota ownership, and sharing — design doc §5 implementation (PR #426 by @saltbo)
  • 6521d1b - events: unify SSE stream, replace frontend polling (PR #432 by @saltbo)
  • 91d10f9 - openapi: global OpenAPI document + Scalar UI, drop hand-written stubs (PR #440 by @saltbo)
  • e132cb9 - openapi: complete API coverage with truthful schemas + unified error handling (PR #442 by @saltbo)
  • 00f48cf - avatars: host avatars + team logos on Cloud via SDK 2.4.0; remove public-bucket mode (PR #467 by @agent-kanban-local[bot])
  • f24c6e2 - avatar: self-host avatars on R2 on Workers + fix avatar refresh/fallback (PR #468 by @saltbo)
  • f4b65e4 - make forcePathStyle configurable per storage (PR #474 by @wujianguo)
  • 470a2d7 - add admin form primitives (PR #478 by @agent-kanban-local[bot])
  • 82c5452 - auth: move OAuth provider editor to drawer (PR #480 by @agent-kanban-local[bot])
  • 9acbc01 - storage: add provider presets and request preview (commit by @saltbo)
  • 3695c80 - downloads: add task event timeline (commit by @saltbo)
  • 02eda6d - add admin user activity feed (PR #493 by @agent-kanban[bot])
  • 7ccaba2 - refine admin audit filtering (PR #495 by @agent-kanban[bot])
  • 556174f - admin: add team activity tab (PR #498 by @agent-kanban[bot])
  • 554c231 - admin: redesign dashboard with pro analytics (commit by @saltbo)
  • b7f7fa7 - admin: implement operations dashboard stats (commit by @saltbo)
  • 6376e2a - admin: refine operations dashboard analytics (commit by @saltbo)
  • 75d7b50 - webdav: support optional custom domains (commit by @saltbo)
  • 0bf1f9e - webdav: derive fixed domain from public URL (commit by @saltbo)
  • e761b6a - webdav: verify derived domains before publishing (commit by @saltbo)
  • d9da509 - admin: add live dashboard overview (commit by @saltbo)
  • 40c5f10 - admin: show storage change trend (commit by @saltbo)
  • df0c5f3 - auth: add configurable email verification (commit by @saltbo)
  • 23f679d - webdav: add admin service controls (commit by @saltbo)
  • 387c731 - api-keys: unify user ownership and workspace scopes (commit by @saltbo)
  • 31005e1 - workspaces: reorganize workspace settings (commit by @saltbo)
  • [0cfc0fa](h...
Read more

v2.7.4

Choose a tag to compare

@github-actions github-actions released this 11 Jun 16:57

✨ New Features

  • e56d3dc - server: auto-trust loopback and LAN origins without TRUSTED_ORIGINS (commit by @saltbo)
  • e6e67c5 - licensing: harden cloud pairing — env keys, clear errors, confirm handshake (PR #424 by @saltbo)
  • 5ce3845 - store: add coupon entry to checkout (commit by @saltbo)

🐛 Bug Fixes

  • d2f3a34 - server: log underlying cause chain for failed D1 queries (commit by @saltbo)
  • 77ca806 - store: auto-cancel pending plan order on duplicate checkout error (commit by @saltbo)
  • fa136a5 - upload: make Content-Disposition Latin-1 safe for non-ASCII filenames (commit by @saltbo)
  • 47b11bf - update the get-session cache logic (commit by @saltbo)
  • 60c51cf - auth: eliminate get-session hangs from cross-request pending init (commit by @saltbo)
  • 401eb3f - admin: register default quota input with valueAsNumber (PR #425 by @saltbo)

⚡ Performance Improvements

  • a3866e2 - fix get-session worker slowness and implement client-side cache (commit by @saltbo)

♻️ Refactors

  • 4f58c08 - licensing: confirm cloud license via PATCH (commit by @saltbo)

🔧 Chores

Docker

docker pull ghcr.io/saltbo/zpan:v2.7.4
docker pull ghcr.io/saltbo/zpan:v2.7.4-cli

v2.7.3

Choose a tag to compare

@github-actions github-actions released this 09 Jun 22:17

✨ New Features

  • 9d70acf - licensing: support independent business authorization (commit by @saltbo)
  • de0213a - add PostHog instance telemetry (PR #414 by @saltbo)
  • f922fd4 - quota: allow admins to edit and revoke granted entitlements (PR #419 by @saltbo)
  • 232ad89 - admin: add diagonal license-edition corner ribbon to admin layout (PR #421 by @saltbo)
  • 891e331 - admin: add About page with instance info and edition-aware cloud links (PR #422 by @saltbo)
  • 5a5583b - licensing: regroup comparison table by capability and add social-login/downloader gates (PR #423 by @saltbo)
  • e700fd4 - about: add changelog drawer, latest-version check, and commit hash (commit by @saltbo)
  • 6aa5257 - about: take latest version from GitHub Releases, keep CHANGELOG drawer (commit by @saltbo)
  • b9d4429 - about: dedicated changelog renderer with per-version separators (commit by @saltbo)
  • dc936e5 - about: add changelog refresh button that bypasses the cache (commit by @saltbo)
  • b880ebe - about: widen changelog drawer, refine styling, unlink commit (commit by @saltbo)
  • 53ca110 - about: split runtime into runtime engine + deployment platform (commit by @saltbo)

🐛 Bug Fixes

  • e17e201 - docker: use host hostname for downloader registration (commit by @saltbo)
  • ecb38df - downloads: make remote usage billing resilient (commit by @saltbo)
  • 1d7ac9b - telemetry: use built-in product reporting endpoint (PR #416 by @saltbo)
  • bd9f047 - telemetry: report instance after deployment (PR #417 by @saltbo)
  • 61f643a - telemetry: clean up deploy report secret (commit by @saltbo)
  • 5c3df3c - telemetry: use PostHog SDK for instance reports (commit by @saltbo)
  • 7b5cd90 - telemetry: use correct PostHog project token (commit by @saltbo)
  • 4009402 - telemetry: align instance report fields (commit by @saltbo)
  • 178e731 - telemetry: enable GeoIP enrichment (commit by @saltbo)
  • f52213b - telemetry: standardize instance reports (commit by @saltbo)
  • 1a6a774 - telemetry: disable reports during e2e (commit by @saltbo)
  • 48b82cc - telemetry: avoid generic disable flag (commit by @saltbo)
  • 6bcb540 - telemetry: do not fail deploy on report timeout (commit by @saltbo)
  • 3b5f6c7 - telemetry: persist detected site origin (commit by @saltbo)
  • ef122ec - version: inject app version at build time (commit by @saltbo)
  • af43701 - version: set app version global in node entry (PR #418 by @saltbo)
  • b10a1f3 - quota: chunk batch quota IN queries under D1's 100-param cap (commit by @saltbo)
  • 0063557 - docker: repair image startup and guard it in CI (commit by @saltbo)
  • ee8eea1 - i18n: add missing sitePublicOrigin admin settings keys (commit by @saltbo)
  • bae4d62 - deploy: provision archive queue and restore vite build step (PR #415 by @wshijiang)
  • 42342be - version: resolve app version from package.json, not git describe (commit by @saltbo)

⚡ Performance Improvements

  • 9c16adb - quota: batch admin quota listing and move monthly reset to cron (commit by @saltbo)

♻️ Refactors

  • 17741ef - about: consolidate version row, move commit to its own line (commit by @saltbo)

👷 Build System

  • ac00164 - e2e: run core checks before cloud store flow (commit by @saltbo)
  • 120faaf - add Cloudflare deploy dry-run smoke job (commit by @saltbo)
  • 15698aa - release: guide developer to pnpm release on version mismatch (commit by @saltbo)

🔧 Chores

Docker

docker pull ghcr.io/saltbo/zpan:v2.7.3
docker pull ghcr.io/saltbo/zpan:v2.7.3-cli

v2.7.2

Choose a tag to compare

@github-actions github-actions released this 07 Jun 04:41

✨ New Features

🐛 Bug Fixes

  • a1785f6 - docker: make downloader data volume writable (commit by @saltbo)

Docker

docker pull ghcr.io/saltbo/zpan:v2.7.2
docker pull ghcr.io/saltbo/zpan:v2.7.2-cli

v2.7.1

Choose a tag to compare

@github-actions github-actions released this 07 Jun 01:32

✨ New Features

  • a43852d - admin: allow editing downloader display name (commit by @saltbo)

🐛 Bug Fixes

  • 2e12929 - downloads: improve downloader assignment handling (commit by @saltbo)
  • c1cec37 - downloads: report downloader transfer speed (commit by @saltbo)
  • 7e7eeb4 - downloads: expose torrent listen port in docker (commit by @saltbo)
  • 475cb46 - docker: use host hostname for downloader (commit by @saltbo)
  • 5f83099 - docker: configure remote downloader runtime (commit by @saltbo)

Docker

docker pull ghcr.io/saltbo/zpan:v2.7.1
docker pull ghcr.io/saltbo/zpan:v2.7.1-cli

v2.7.0

Choose a tag to compare

@github-actions github-actions released this 06 Jun 23:32

💥 BREAKING CHANGES

  • due to 41f3e45 - enforce strict RESTful route conventions (commit by @saltbo):

    all listed API endpoints have changed paths or methods

  • due to 88e65b0 - replace /dl/:token with /r/:token unified redirect (v2.4.0 T3) (PR #318 by @saltbo):

    replace /dl/:token with /r/:token unified redirect (v2.4.0 T3) (#318)

✨ New Features

  • 6de9bbe - add ulink api for the feature editor save (commit by @saltbo)
  • dd7d28a - returns the matter for the create api (commit by @saltbo)
  • 98357f0 - user demo not allowed change password (commit by @saltbo)
  • 0a30c6a - add s3 path-style switch for the storage (commit by @saltbo)
  • 6e4eadc - add event worker for the vfs (commit by @saltbo)
  • 0e24e91 - add authz support by the opa (commit by @saltbo)
  • b817cab - ZPan v2.0 roadmap, architecture, and repo reset (commit by @saltbo)
  • c6f94dc - scaffold v2.0 monorepo with working auth flow (commit by @saltbo)
  • 6b93794 - add project infrastructure — testing, CI, linting, logging (commit by @saltbo)
  • 175c52a - fix CF Pages deployment and update project docs (commit by @saltbo)
  • 6b27354 - add i18n infrastructure with react-i18next and en/zh locale files (PR #239 by @saltbo)
  • a151090 - add Better Auth organization + admin plugins (PR #241 by @saltbo)
  • b2e813d - add S3 service layer and path template engine (PR #243 by @saltbo)
  • b5362e1 - add user management API and org quota CRUD (PR #244 by @saltbo)
  • e5b4493 - implement admin user management UI with quota settings (PR #246 by @saltbo)
  • 892a6fc - implement storage CRUD API with bucket pool selection (PR #249 by @saltbo)
  • 9ec5e45 - add admin layout with storage management UI (PR #248 by @saltbo)
  • c0daf53 - server: implement system options CRUD API (PR #255 by @saltbo)
  • 6f9260d - server: implement file CRUD API with presigned URLs (PR #260 by @saltbo)
  • 53617e5 - web: implement trash page with restore, delete, and empty trash (PR #264 by @saltbo)
  • 9216ff0 - web: add file preview system for images, PDF, code, audio, and video (PR #265 by @saltbo)
  • a8046c1 - web: add admin system settings page for site name and description (PR #270 by @saltbo)
  • f9a36e4 - web: integrate SVAR File Manager with upload flow (PR #266 by @saltbo)
  • e66c2e5 - web: complete i18n coverage for UI primitives (PR #268 by @saltbo)
  • efec832 - Dockerfile + docker-compose for Node.js deployment (PR #271 by @saltbo)
  • 1620a2e - server: batch operations API for move, trash, delete (PR #272 by @saltbo)
  • cd764c0 - server: recycle bin API for matters (PR #273 by @saltbo)
  • 2da0d14 - web: migrate to Hono RPC client, eliminate all raw fetch calls (commit by @saltbo)
  • 67475be - replace SVAR with custom file manager, path-based navigation, sidebar folder tree (commit by @saltbo)
  • 3a3364b - persist sort state in localStorage, add file search filter (commit by @saltbo)
  • 6edad56 - enforce org storage quota on upload and copy (commit by @saltbo)
  • b73d7a0 - server: auto-migrate schema on Node platform boot (commit by @saltbo)
  • b059af1 - auth: pin activeOrganizationId on new sessions, tighten personal-org lookup (commit by @saltbo)
  • bce4da3 - quota: add default org quota with admin settings UI and db:reset script (commit by @saltbo)
  • 3b2fe7f - admin: add storage capacity setting to storage form (PR #275 by @saltbo)
  • 903f12b - admin: convert storage form dialog to right-side drawer (PR #276 by @saltbo)
  • 5c453bc - settings: implement profile and appearance settings page (PR #277 by @saltbo)
  • 3b80eff - migrate from CF Pages to Workers with one-click deploy button (commit by @saltbo)
  • a8f1154 - ci: run E2E tests on both Node and CF Workers runtimes (commit by @saltbo)
  • abba373 - deploy: auto-select staging env for non-production branch builds (commit by @saltbo)
  • c376f2e - ci: add Codecov coverage reporting and badge (commit by @saltbo)
  • bd26e54 - ui: add responsive layout for desktop, tablet, and mobile (commit by @saltbo)
  • 6352a8c - ui: adaptive mobile preview with bottom drawer per file type (commit by @saltbo)
  • e3b257e - e2e: add file preview tests with route mocking for S3 (commit by @saltbo)
  • da08b01 - auth: add better-auth username plugin (PR #279 by @saltbo)
  • 4b20e6b - add email service abstraction with SMTP and HTTP API drivers (PR #280 by @saltbo)
  • 97e30a5 - add invite code system for registration gating (PR #281 by @saltbo)
  • 4a5fbb7 - auth: add dynamic OAuth provider system (PR #282 by @saltbo)
  • 364cbc2 - auth: add registration mode control and email verification (PR #283 by @saltbo)
  • bd30514 - auth: sign-in/sign-up UI overhaul (PR #286 by @saltbo)
  • 8973453 - admin: add auth settings page for OAuth, invites, email, and registration mode (PR #287 by @saltbo)
  • e40ba07 - remove Name field from registration form (PR #291 by @saltbo)
  • 98059b2 - add organizationClient plugin to auth-client (PR #292 by @saltbo)
  • a22448c - add team RBAC middleware for org-level role enforcement (PR #293 by @saltbo)
  • f1604c7 - user public share homepage (/u/:...
Read more