v2.7.0
💥 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/:username) (PR #294 by @saltbo)4f2364b- add team creation and management pages (PR #295 by @saltbo)7003b27- add team members management page (PR #297 by @saltbo)bfba5fa- add org switcher to sidebar header for workspace switching (PR #296 by @saltbo)d503315- add activity feed for team workspaces (PR #298 by @saltbo)878cdeb- team invitation via email and invite link (PR #302 by @saltbo)cb7df2f- auto-generate username for OAuth sign-up users (commit by @saltbo)e989e03- show username field in settings profile (read-only) (commit by @saltbo)6e92204- move OAuth buttons above email form, collapse form when >3 providers (commit by @saltbo)6c8f042- auto-configure GitHub OAuth in db-reset seed script (commit by @saltbo)b143b5e- 团队详情页 — 共享布局 + Tab 导航 + 索引路由 (PR #304 by @saltbo)b277bb3- ui: Google color palette + sidebar redesign (commit by @saltbo)a842acd- brand: add cloud-cluster logo + favicon (commit by @saltbo)de4938e- add shares schema, service layer, and lifecycle integration (PR #308 by @saltbo)2affe21- shares: add save-to-drive — cross-workspace copy with quota and name conflict handling (PR #310 by @saltbo)2c8e2cc- v2.3.0 T1 — 站内信系统 (in-app notifications) (PR #307 by @saltbo)5bea716- public share endpoints /s/:token, /dl/:token, folder browsing (v2.3.0 T4) (PR #309 by @saltbo)d974ced- shares: authenticated CRUD API + notification dispatch (v2.3.0 T3) (PR #311 by @saltbo)72c08bd- add /shares dashboard with sidebar entry (PR #313 by @saltbo)ecd87d4- Share creation dialog (Landing/Direct) with file context menu (PR #314 by @saltbo)66b3ee3- public share landing page /s/:token + Workers SSR OG meta (PR #312 by @saltbo)289fd2f- share: simplify password field to auto-generate switch (commit by @saltbo)733a693- nav: move Shares above Trash and rename from Shared to Shares (commit by @saltbo)5625cf0- share: redesign public share page (commit by @saltbo)3765a97- layout: move notification bell to top-right header (commit by @saltbo)8a04824- shares: refine share modes and dialog UX (commit by @saltbo)acdfc02- ui: unify page layout across Files/Shares/Trash/Teams/Settings (commit by @saltbo)2dca9d9- db: image hosting schema, apiKey plugin, migration 0011 (v2.4.0 T1) (PR #315 by @saltbo)88e65b0- ihost: replace /dl/:token with /r/:token unified redirect (v2.4.0 T3) (PR #318 by @saltbo)3e6d3ee- v2.4.0 T5 — /api/ihost/config + Cloudflare for SaaS integration (PR #316 by @saltbo)b8f45f9- ui: v2.4.0 T6 — Image Host sidebar entry + /image-host route + i18n (PR #319 by @saltbo)71fe485- ihost: add host-based custom-domain middleware + path URL resolver (v2.4.0 T4) (PR #320 by @saltbo)fcfb3ab- add Image Hosting settings page (T8) (PR #321 by @saltbo)cb893eb- tool integration config generators — PicGo / uPic / ShareX / Flameshot (v2.4.0 T9) (PR #322 by @saltbo)28c16eb- Images API /api/ihost/images — two-stage + stream-proxy upload + CRUD (PR #317 by @saltbo)0137f00- docker: add deploy variants and auto-generate auth secret (commit by @saltbo)9dbece4- v2.4.0 T7 — Image Host gallery page (PR #324 by @saltbo)964d7dd- ihost: remove Flameshot tool integration (commit by @saltbo)a61bb73- ihost: support JSON base64 upload for uPic compatibility (commit by @saltbo)8005def- v2.5.0 T1 — libSQL (Turso) platform adapter + Docker Turso opt-in (PR #326 by @saltbo)f3295d1- avatar upload for Settings -> Profile (v2.5.0 T7) (PR #327 by @saltbo)5593eec- v2.5.0 T3 — Vercel deployment (entry + vercel.json + workflow + docs) (PR #328 by @saltbo)b5be4c5- v2.5.0 T2 — AWS Lambda deployment (entry + SAM + workflow + docs) (PR #331 by @saltbo)0f403f8- v2.5.0 T4 — Netlify deployment target (PR #329 by @saltbo)8b72a7d- v2.5.0 T6 — Google Cloud Run deployment (service.yaml + workflow + docs) (PR #332 by @saltbo)d33800f- Azure Functions deployment target (v4, Node 22) (PR #330 by @saltbo)bcb0b67- platform: add getBinding() for platform-native resources (commit by @saltbo)4f47a81- image-upload: prefer R2 binding on Cloudflare, fall back to S3 (commit by @saltbo)8555451- add licenseBinding table, migration 0013_licensing, and shared licensing types (PR #339 by @saltbo)b9cea3e- licensing: v2.6 Z2 — Ed25519 verify + PUBLIC_KEYS + entitlement cache (PR #341 by @saltbo)86fab77- licensing: cloud client + binding API (pair, poll, refresh, disconnect) (PR #343 by @saltbo)c05bfc7- v2.6 Z3 — ProBadge, UpgradeHint, useEntitlement frontend primitives (PR #342 by @saltbo)d24c388- add Settings → Billing page with pairing modal and bound/unbound states (PR #344 by @saltbo)29102e6- v2.6 Z6 — 6h background entitlement refresh (PR #345 by @saltbo)1cbe926- gate open registration behind Pro feature (Z8) (PR #347 by @saltbo)c86c773- v2.6 Z7 white-label branding (logo, favicon, wordmark, hide footer) (PR #346 by @saltbo)de5ff92- gate team creation at 3 orgs for community plan (teams_unlimited required for 4th) (PR #348 by @saltbo)3f2890c- retroactive gate — per-team storage quota Pro-only (Z10) (PR #349 by @saltbo)04f9d93- v2.6 Z11 — production public key, Docker cron docs, release notes (PR #350 by @saltbo)fa943ca- replace license_binding table with system_options keys (commit by @saltbo)79adf45- add QR code and countdown timer to pairing modal (commit by @saltbo)b179db9- centralize Pro feature definitions into a single registry (commit by @saltbo)fb3b15a- admin: redesign settings and rename auth to oauth (commit by @saltbo)736d7c8- admin: refine pro-gated settings UI (commit by @saltbo)c4fc8c9- admin: add site invitation signup flow (commit by @saltbo)d7f1ceb- licensing: adjust free plan limits (commit by @saltbo)bf83be3- admin: add audit logs placeholder (commit by @saltbo)ec9cc0b- admin: add announcement placeholder (commit by @saltbo)d75d7e5- email: add cloudflare worker mail service toggle (commit by @saltbo)f0e7af2- licensing: redesign Pro license binding (commit by @saltbo)57cc834- share: redesign access page preview (commit by @saltbo)4537bfa- preview: add microsoft office viewer (commit by @saltbo)c532f28- preview: improve file preview controls (commit by @saltbo)8b67eec- upload: add multi-file upload progress queue (commit by @saltbo)3321ac9- music: add music player component and integration (commit by @saltbo)6314717- announcements: add site announcement management (commit by @saltbo)8f4d55d- show oauth provider icons (commit by @saltbo)7d81ef2- implement admin audit logs (PR #355 by @saltbo)1b734c0- expand audit event coverage across all state-changing operations (PR #357 by @saltbo)cce398a- admin: streamline overview dashboard (commit by @saltbo)41877d3- add quota store backend (PR #361 by @saltbo)8a185c4- add quota store UI (PR #363 by @saltbo)5eac0f4- branding: add pro theme settings (PR #362 by @saltbo)2363ca1- manage quota store redemption codes (commit by @saltbo)ec832b0- storage: refine storage plan experience (commit by @saltbo)3a88c17- add monthly traffic quotas (commit by @saltbo)df2e2a8- manage Cloud storage packages (commit by @saltbo)bf0bf99- separate storage code revoke and delete (commit by @saltbo)be58015- quota-store: support store reversal delivery (commit by @saltbo)9cabe3c- align Storage Plans with combined package model (commit by @saltbo)bf8a4f5- add quota entitlements (PR #383 by @saltbo)52a8dc4- clarify storage plans and traffic metering UI (PR #385 by @saltbo)25416a5- quota: support plan and extra entitlement quotas (commit by @saltbo)58d94c3- cloud-store: accept opaque store deliveries (commit by @saltbo)0b2e7d4- store: support subscription and fixed quota packages (commit by @saltbo)1ebc46f- store: manage workspace subscription plans (commit by @saltbo)25c4a3c- billing: configure traffic overage price on plans (commit by @saltbo)ae3f368- billing: configure per-currency metered plan pricing (commit by @saltbo)46cacc0- storage: redesign plan catalog (commit by @saltbo)0f0ea65- storage: allow metered traffic overage (commit by @saltbo)73a592c- pro: tighten gates and unify upgrade prompts (commit by @saltbo)a31ee34- admin: add cloud order details drawer (commit by @saltbo)2053b84- add background job foundation (PR #388 by @saltbo)efb9239- add WebDAV API-key protocol routes (PR #390 by @saltbo)0694d55- add local archive background jobs (commit by @saltbo)ddbda7c- add background tasks page (commit by @saltbo)85cd399- add user-bound WebDAV app passwords (commit by @saltbo)9557f4d- harden WebDAV client compatibility (commit by @saltbo)e41ea3f- webdav: add RFC 4918 Class 2 support (PR #398 by @saltbo)fdb61c2- add captcha protection for authentication (PR #400 by @saltbo)2438275- archive: queue streaming archive jobs (commit by @saltbo)f5e142c- files: support folder uploads (commit by @saltbo)f45e873- integrate cloud credits store flow (commit by @saltbo)dd1d237- store: add credits package management (commit by @saltbo)7f85da2- quota: consolidate storage entitlements (commit by @saltbo)1ff6d13- billing: meter storage egress with credits (commit by @saltbo)53076d7- downloads: add remote download workers (commit by @saltbo)f698e5a- downloads: show normalized task details (commit by @saltbo)948fc0b- downloads: redesign task inspector (commit by @saltbo)cf3324b- downloads: preserve directory uploads (commit by @saltbo)c9e0a9b- downloads: retain bt seeds after upload (commit by @saltbo)1b4f149- downloads: stream normalized task details (commit by @saltbo)6276530- auth: unify api key management (commit by @saltbo)9f9d895- downloads: improve task panel layout (commit by @saltbo)94dada7- downloads: add task actions and classification (commit by @saltbo)4dcbab5- downloads: improve task controls and metadata (commit by @saltbo)f5c247f- downloader: persist retained seed policy (commit by @saltbo)c19cbbf- downloader: auto bootstrap device login (commit by @saltbo)9486360- cli: promote downloader to zpan command (commit by @saltbo)dd66ed4- cli: allow config init server url (commit by @saltbo)b27f7f8- downloads: improve download table controls (commit by @saltbo)1260452- downloads: report peer geo regions (commit by @saltbo)
🐛 Bug Fixes
2958950- update the jwt package (commit by @saltbo)9211e04- none content-type for somefile (commit by @saltbo)65ccdb6- lose region for the minio #127 (commit by @saltbo)72db8df- error for the unit test (commit by @saltbo)02302cc- storage update error (PR #140 by @2hxst)5771c78- update the $RAW_EXT builder #174 (PR #185 by @saltbo)3cad047- add share matter api (commit by @saltbo)4adf165- update the condition of matter expire (commit by @saltbo)ee13d64- error list for the matter (commit by @saltbo)b05f992- error for the unit test (commit by @saltbo)1546faa- embed the file authz.rego (PR #193 by @saltbo)0745bd0- specify packageManager for CI pnpm setup (commit by @saltbo)29d11e5- add explicit @cloudflare/workers-types dependency (commit by @saltbo)941e642- commit routeTree.gen.ts for CI typecheck (commit by @saltbo)c682995- run drizzle-kit push before E2E tests in CI (commit by @saltbo)729e64e- increase CF test timeout to 15s for CI runners (commit by @saltbo)906799a- create dist/ before CF tests in CI (commit by @saltbo)800c1f0- switch to source-first internal package pattern (commit by @saltbo)974e602- web: fix 4 frontend bugs found during acceptance testing (commit by @saltbo)c11714f- web: fix admin layout double header by skipping user layout on admin routes (commit by @saltbo)b6bf841- web: fix file upload, preview, and SVAR upload integration (commit by @saltbo)3f02e0b- web: fix media preview by replacing vidstack with native HTML5 elements (commit by @saltbo)97b1e00- web: adapt preview dialog per file type (commit by @saltbo)e008cbe- web: upgrade vidstack to 1.x and adapt preview per file type (commit by @saltbo)e616a01- web: image preview uses fullscreen lightbox, not dialog (commit by @saltbo)48eb25a- web: hide SVAR sidebar tree and breadcrumb for cleaner integration (commit by @saltbo)a990487- web: keep SVAR breadcrumb for folder navigation (commit by @saltbo)283b420- web: update api tests for Hono RPC client headers (commit by @saltbo)741b4af- change search from client-side to server-side global search (commit by @saltbo)862e6be- search triggers on Enter key, not on every keystroke (commit by @saltbo)85f91b4- update e2e test for renamed sidebar items (My Files, Trash) (commit by @saltbo)7173e45- remove unused R2 bucket binding (commit by @saltbo)ff1ad78- auth: fail-fast on missing secret, align trustedOrigins across entries (commit by @saltbo)1071f8a- auth: use native scrypt to bypass Cloudflare Workers CPU limit (commit by @saltbo)4d0511b- deploy: isolate preview environment from production D1 (commit by @saltbo)7124289- auth: promote first user before INSERT so session reflects admin role (commit by @saltbo)1462a76- auth: throw on malformed stored password hash instead of returning false (commit by @saltbo)e2ab579- s3: replace DeleteObjectsCommand with per-key deletes for CF Workers compat (commit by @saltbo)fa99b31- ci: remove drizzle-kit push and add BETTER_AUTH_SECRET for E2E (commit by @saltbo)e7c732c- docker: skip prepare script in prod deps stage (commit by @saltbo)9ddcbba- docker: install build tools for better-sqlite3 native compilation (commit by @saltbo)70d60c6- docker: use separate prod deps stage with copied native binaries (commit by @saltbo)a082a51- ci: pass tag input to changelog action (commit by @saltbo)41d103d- deploy: separate vars from secrets in deploy button form (commit by @saltbo)5d7f358- deploy: remove vars from top-level wrangler config to avoid local dev conflict (commit by @saltbo)5464522- deploy: remove placeholder secret value from .dev.vars.example (commit by @saltbo)575c10c- ci: provide fallback BETTER_AUTH_SECRET in bootstrap cf-test (commit by @saltbo)ad69c38- auth: infer baseURL and trustedOrigins from request when not configured (commit by @saltbo)fa50adf- ci: add .node-version for Workers Builds (commit by @saltbo)0e30c47- workers: upgrade to nodejs_compat_v2 for full Node API support (commit by @saltbo)9b1cde6- e2e: use --mode node for Vite in Playwright to skip cloudflare plugin (commit by @saltbo)a8b8f57- ci: apply D1 migrations before CF Workers E2E tests (commit by @saltbo)388b200- deploy: use preview_database_id for preview D1 binding (commit by @saltbo)4768c13- deploy: add assets directory and restore [env.staging] for preview D1 (commit by @saltbo)3ec4cdd- deploy: use CLOUDFLARE_ENV for staging builds instead of --env flag (commit by @saltbo)2ed2a67- dev: use staging D1 for local CF Workers development (commit by @saltbo)de57120- deploy: remove name override from staging env (commit by @saltbo)c25dece- docs: use reviewer account for public staging credentials (commit by @saltbo)7d5d0a5- ui: add tw-animate-css for shadcn animation support and tune sheet speed (commit by @saltbo)33ca372- dev: fix D1 local database name and add db:migrate:d1 script (commit by @saltbo)c70b684- ci: enable coverage generation and fix Codecov upload path (commit by @saltbo)727ddeb- ui: clean up pointer-events on sidebar unmount (commit by @saltbo)d3d5015- ci: fix E2E server startup in CI and increase dialog timeouts (commit by @saltbo)a1621d6- e2e: gracefully skip tests when storage is unavailable in CI (commit by @saltbo)ab2a4c1- e2e: seed storage in CI instead of skipping tests (commit by @saltbo)015415b- e2e: use global setup to seed admin and storage before all tests (commit by @saltbo)130adfe- e2e: add Origin header to global setup API calls (commit by @saltbo)3f15a6a- e2e: eliminate all skipped tests with setup project and admin login (commit by @saltbo)783eba8- auth: read inviteCode from request body instead of additionalFields (commit by @saltbo)92306ca- auth: store user ID instead of email in invite code usedBy (commit by @saltbo)c324abd- auth: validate invite code in before hook, redeem in after hook (commit by @saltbo)72218fe- exclude test files from TanStack Router route tree (commit by @saltbo)61f4316- resolve sidebar dark mode by unifying CSS variable system (PR #289 by @saltbo)0d4cdda- move Teams entry from sidebar nav to avatar dropdown menu (PR #299 by @saltbo)977c7a1- 团队列表过滤、成员数、创建后切换 (PR #300 by @saltbo)027667f- rename duplicate migration 0007 to 0008 (commit by @saltbo)d5517f3- ci: align username signup test with generated usernames (commit by @saltbo)960eab3- teams breadcrumb + settings password tab split (PR #306 by @saltbo)50c92d6- files: enforce unique names + Finder-style conflict resolver (commit by @saltbo)b310145- migrations: correct 0010/0011 timestamps; add CLAUDE.md rules (commit by @saltbo)f215439- v2.3.0: save-to-drive crash, media preview, share dialog polish (commit by @saltbo)6bf8ecc- share: return 403 instead of 401 on wrong share password (commit by @saltbo)630e8c9- config: add path aliases to root tsconfig.json for shadcn CLI (commit by @saltbo)4a92aed- share: dedupe public view counting (commit by @saltbo)f0f3769- e2e: stabilize responsive playwright coverage (commit by @saltbo)8e079ab- auth: create personal org during sign-up and set activeOrganizationId (commit by @saltbo)6e14fd6- multipart upload 500, presign 413, API key permissions, and org slug check (commit by @saltbo)9188953- test: add missing action field in CF objects PATCH test (commit by @saltbo)31fc067- ihost: add getPreviewFile to image host data source (commit by @saltbo)2c36c2c- ihost: filter draft images from listing and bypass referer check for same-origin (commit by @saltbo)6580eaa- ihost: include origin in copied image URLs (commit by @saltbo)a21f850- ihost: fix broken tool integration configs for PicGo, uPic, ShareX (commit by @saltbo)8edd9dd- ihost: redesign PicGo and uPic tool configs for GUI field entry (commit by @saltbo)34a2e83- ihost: handle uPic validate and infer MIME from file extension (commit by @saltbo)d4be0d0- ihost: allow empty referer, add JSON path field, set rate limits (commit by @saltbo)01b4a22- ihost: update CF test for JSON upload support (commit by @saltbo)c41dd20- ihost: move enable button from image-host page to settings (commit by @saltbo)2aa6ab4- ci: use --json flag for wrangler d1/secret list commands (commit by @saltbo)ed1bebe- ci: add build step before wrangler deploy (commit by @saltbo)93c5e77- ci: use --format json for wrangler secret list (commit by @saltbo)14069fa- use Docker Hub image for RustFS (rustfs/rustfs) (commit by @saltbo)a575e05- docker: resolve 404 on port 8222 and simplify build (commit by @saltbo)0883051- ci: drop unsupported --json from wrangler d1 create (commit by @saltbo)2656970- ci: deploy from vite-plugin output instead of repo root (commit by @saltbo)05e5e17- settings: add missing avatar i18n keys + unify visual design across tabs (PR #334 by @saltbo)95a6872- cf-deploy: use R2 REST API for bucket ensure (wrangler lacks --json) (commit by @saltbo)0adaac8- cf-deploy: run wrangler from repo root, not dist/zpan (commit by @saltbo)76645d4- align licensing client with zpan-cloud API contract (commit by @saltbo)134d325- update cloud public key for production keypair (commit by @saltbo)784b54a- move billing page from user settings to admin panel (commit by @saltbo)7cb8560- remove QR code, keep countdown timer in pairing modal (commit by @saltbo)45b623e- reject invalid cloud refresh certificates (commit by @saltbo)4872f97- align licensing pairing with cloud certificates (commit by @saltbo)8fcd677- admin: reorder users page actions (commit by @saltbo)2657724- e2e: stabilize admin and site invitation flows (commit by @saltbo)115aa4a- test: correct teams upgrade hint scenario (commit by @saltbo)7b9206f- test: stabilize cloudflare storages coverage (commit by @saltbo)69bc492- cf: remove email sender allowlist (commit by @saltbo)d28dbe7- email: require explicit provider selection (commit by @saltbo)7c7ab03- files: improve grid file icons (commit by @saltbo)54d9d6a- e2e: prevent music popover from blocking CI (commit by @saltbo)ad4bff0- announcements: describe announcement dialogs (commit by @saltbo)fecff6d- announcements: use full markdown editor (commit by @saltbo)65b0c50- announcements: simplify publishing controls (commit by @saltbo)95254c1- announcements: align pinned form field (commit by @saltbo)ff5ef9b- announcements: highlight pinned items (commit by @saltbo)4518507- admin: align settings actions and user pagination (commit by @saltbo)db166f3- admin: support quota units (commit by @saltbo)e15334e- admin: show user quota and avatars (commit by @saltbo)13ff831- admin: prevent user table overflow (commit by @saltbo)5632cbb- use pro binding auth for quota store (PR #367 by @saltbo)da62c9e- enforce monthly traffic on download URL issuance (commit by @saltbo)9908953- drop local quota store package table (commit by @saltbo)88f6e22- traffic: sync cloud usage in background (commit by @saltbo)3363c4e- storage: distinguish product cards (commit by @saltbo)7cfe929- store: use unified delivery webhook route (commit by @saltbo)0c36b73- store: avoid d1 transaction for cloud webhooks (commit by @saltbo)5830da0- store: detect d1 webhook conflicts (commit by @saltbo)4a22044- store: use d1 batch for webhook transaction (commit by @saltbo)b6c20d7- db: wrap multi-write flows in transactions (commit by @saltbo)14a0723- cloud: keep staging e2e licenses isolated (commit by @saltbo)b9386e1- cloud: unbind license through cloud first (commit by @saltbo)d9d17e7- billing: avoid premature pairing expiry (commit by @saltbo)d8139b1- cloud: use billing store endpoints (commit by @saltbo)07caccd- admin: keep pro badges and theme colors in sync (commit by @saltbo)cc60d2f- cloud-store: send consumer id to cloud (commit by @saltbo)0de620d- cloud-store: align customer fields with cloud (commit by @saltbo)8c9dcfd- cloud-store: use wallet balances endpoint (commit by @saltbo)42a676f- ui: show total storage in sidebar quota panel (commit by @saltbo)d2f4e1b- storage: route checkout through redirect page (commit by @saltbo)1b852a3- storage: render checkout redirect route (commit by @saltbo)284101e- storage: move checkout redirect outside app layout (commit by @saltbo)7029ef4- admin: adjust storage plan table layout (commit by @saltbo)a0022a3- cloud-store: accept paged gift card create responses (commit by @saltbo)736fd00- cloud-store: use paged gift card create response (commit by @saltbo)0c070d8- cloud-store: align gift cards with cloud model (commit by @saltbo)95b4872- admin: mask gift card codes in table (commit by @saltbo)0795867- cloud-store: read order item deliverables (commit by @saltbo)e82f868- cloud-store: read order deliverable quotas (commit by @saltbo)d143fc6- storage: constrain order history dialog height (commit by @saltbo)c218f90- webdav: make preview auth and locks D1-safe (PR #399 by @saltbo)ba0f27e- webdav: stream file transfers (commit by @saltbo)81a1aef- webdav: align range and proppatch semantics (commit by @saltbo)c3596a6- webdav: honor date conditions and overwrite status (commit by @saltbo)dc5a812- webdav: add access logs for transfer debugging (commit by @saltbo)ea27161- webdav: unblock worker streaming transfers (commit by @saltbo)bdd2d52- webdav: read ahead for mounted media ranges (commit by @saltbo)d5b56b2- webdav: bypass cache hits for mounted media (commit by @saltbo)8560b1b- webdav: support unknown length streaming PUT (commit by @saltbo)4079fae- webdav: avoid mounted media cache validators (commit by @saltbo)46080f3- webdav: serve media ranges exactly (commit by @saltbo)2042419- webdav: preserve stream content length (commit by @saltbo)dfeca7c- webdav: wrap ranged streams by length (commit by @saltbo)b4401e1- webdav: normalize mount root slashes (commit by @saltbo)c16523d- webdav: redirect bare mount path (commit by @saltbo)ccf13ea- webdav: route bare dav path to worker (commit by @saltbo)cecc610- webdav: handle fixed stream cancellation (commit by @saltbo)78500bc- webdav: tolerate stream cancellation cleanup (commit by @saltbo)c444d21- webdav: stream multipart byte ranges (commit by @saltbo)2b69a02- webdav: speed up small fixed-length uploads (commit by @saltbo)8b45c62- use better auth captcha providers (PR #401 by @saltbo)ef4a105- archive: persist streaming task progress (commit by @saltbo)f869eeb- s3: apply customHost to presigned upload, download, and inline URLs (commit by @saltbo)f3972c2- s3: handle missing customHost scheme and remove bucket name from path (commit by @saltbo)a68075f- preview: prevent layout jitter by hiding overflow for audio and video (commit by @saltbo)8d4e51e- preview: support MKV playback by letting browser sniff mime type natively (commit by @saltbo)bfa7de5- preview: display friendly error fallback on media playback failure (commit by @saltbo)60b4dbf- preview: proactively detect unsupported video extensions to show error UI immediately (commit by @saltbo)399f932- s3: conform to RFC 6266 for ResponseContentDisposition filename encoding (commit by @saltbo)f65139f- s3: set Content-Disposition metadata on objects during S3 direct upload for custom domains (commit by @saltbo)c0c6a27- s3: bypass customHost in presignUpload to support S3 PUT uploads on R2 custom domains (commit by @saltbo)9087868- align store pricing with USD contract (commit by @saltbo)a28040c- use browser AWS runtime in worker build (commit by @saltbo)c3864c1- store: use updated cloud sdk pricing contract (commit by @saltbo)38adeb4- store: align storage credits storefront (commit by @saltbo)e88b52b- store: accept zero credit gift cards (commit by @saltbo)4a54f2d- e2e: stabilize cloud pairing slots (commit by @saltbo)cf12806- e2e: clean cloud license slots (commit by @saltbo)9e2ae06- downloader: finish aria2 bt downloads after seeding (commit by @saltbo)41d097d- downloader: normalize login heartbeat engine (commit by @saltbo)0744b47- downloader: send fixed length uploads (commit by @saltbo)8762eb0- downloader: send signed upload headers (commit by @saltbo)912042e- downloader: reconnect aria2 rpc (commit by @saltbo)7612d58- downloads: compact task inspector layout (commit by @saltbo)0305d73- downloads: simplify compact task list (commit by @saltbo)cd3a3a7- downloader: report aria2 peer samples (commit by @saltbo)754d1aa- downloads: separate storage and peer upload metrics (commit by @saltbo)81c0627- constrain credits dialog height (commit by @saltbo)aef07c1- decouple cloud store page loading (commit by @saltbo)dbd4755- downloads: prevent table sorting lockup (commit by @saltbo)44632c4- downloads: refine task table layout (commit by @saltbo)b604271- downloader: report aria2 eta (commit by @saltbo)e1fd510- downloader: rename conflicting uploads (commit by @saltbo)a8622d6- downloader: normalize torrent upload results (commit by @saltbo)52dc621- objects: avoid LIKE patterns for folder descendants (commit by @saltbo)655b58d- downloader: acknowledge stopped cancel controls (commit by @saltbo)d6a368c- downloader: multipart upload large results (commit by @saltbo)4ec2072- storage: avoid sdk xml parser for multipart (commit by @saltbo)83d26e9- storage: surface multipart complete failures (commit by @saltbo)b5154e7- storage: presign multipart complete without body (commit by @saltbo)b05bf4f- downloads: normalize target folder paths (commit by @saltbo)121d447- files: move folder upload into upload menu (commit by @saltbo)3c9e1bf- webdav: stabilize propfind directory listings (commit by @saltbo)0b3bc2d- api-keys: return 429 for rate-limited keys (commit by @saltbo)08a3d5c- downloader: stabilize aria2 live downloads (commit by @saltbo)780d487- downloader: reuse aria2 magnet tasks by infohash (commit by @saltbo)1d5926d- downloader: recover completed downloads before rerun (commit by @saltbo)2bf5ce6- downloader: report aria2 file paths relative to task (commit by @saltbo)6ba1f16- downloader: preserve retry recovery checkpoints (commit by @saltbo)2ed46ea- downloader: exit cleanly on shutdown (commit by @saltbo)6fbad55- downloader: report resumable state on shutdown (commit by @saltbo)4864896- downloader: isolate managed engine signals (commit by @saltbo)86c9e79- downloader: mark shutdown tasks paused (commit by @saltbo)9dd3ca0- downloader: separate interrupted task recovery (commit by @saltbo)031c568- downloader: keep task upload tokens stable (commit by @saltbo)e113c6c- downloader: clean recovered torrent runtime (commit by @saltbo)09a1f25- downloader: trim torrent root from reported files (commit by @saltbo)e025313- downloader: persist completed aria2 seeds (commit by @saltbo)647fcb6- downloads: normalize migrated task runtime (commit by @saltbo)d8daba2- downloader: restore aria2 seeds after restart (commit by @saltbo)65eb5d9- downloader: reset runtime on task restart (commit by @saltbo)a5c5cee- cli: avoid probing unmanaged runtimes in auto mode (commit by @saltbo)ce170cb- cli: keep auth token in global config (commit by @saltbo)ebe0e42- downloader: stabilize docker runtime validation (commit by @saltbo)bc3ef9f- downloads: use standard geoip data paths (commit by @saltbo)c1fa89e- downloads: align docker geoip path (commit by @saltbo)155dcd8- downloads: refine detail panel presentation (commit by @saltbo)978e89d- downloads: refine peer geo and log timeline (commit by @saltbo)219b620- downloads: show active transfer progress (commit by @saltbo)eae0cad- downloads: reorder log timeline header (commit by @saltbo)4f15956- quota: reconcile storage usage after purge (commit by @saltbo)76f9e01- traffic: meter webdav downloads (commit by @saltbo)1bd9053- trash: list nested trashed roots (commit by @saltbo)be8e029- ui: truncate long page breadcrumbs (commit by @saltbo)24e88e1- files: show batch progress in dialogs (commit by @saltbo)976590a- files: show batch operation failure details (commit by @saltbo)9fe0bb3- downloader: make aria2 reset idempotent (commit by @saltbo)619d5dc- downloader: merge task runtime patch updates (commit by @saltbo)00f42e7- downloader: ignore stale seed progress after restart (commit by @saltbo)4579efd- downloader: clear eta after transfer completion (commit by @saltbo)71af982- downloader: store runtime updates as snapshots (commit by @saltbo)47c0af9- downloader: clear seeding phase on shutdown (commit by @saltbo)
♻️ Refactors
057ad8e- add GET into the cors allowMethods (commit by @saltbo)76fca8a- update the codes by the clean arch (PR #184 by @saltbo)f817177- auto append a suffix if matter exist (commit by @saltbo)c06eed7- remove the dependency between dao and repo (commit by @saltbo)78e0178- reimplement the user storage quota calc (commit by @saltbo)a8912c3- redesign API routes to RESTful /api/objects (commit by @saltbo)8623a17- web: move lightbox logic into ImagePreview component (commit by @saltbo)310e495- flatten monorepo to single-package CF Pages Functions structure (commit by @saltbo)d4b7891- migrate raw SQL to Drizzle query builder in services and routes (commit by @saltbo)952d6c3- users: replace metadata-LIKE with slug lookup in listUsers (commit by @saltbo)4f9483b- deploy: flatten wrangler config and rename preview to staging (commit by @saltbo)877ef9d- deploy: inline staging env detection into npm build script (commit by @saltbo)689d9cc- remove custom filePath, enforce tenant-isolated storage path (PR #278 by @saltbo)6c1d7dc- e2e: replace test.skip with grep tags for device filtering (commit by @saltbo)df32f35- test: separate unit and integration tests (commit by @saltbo)060a8fd- remove isPublic from matters, simplify user share homepage (PR #301 by @saltbo)a428c1e- split /settings into sub-pages with Tab navigation (PR #305 by @saltbo)0c20475- shares: unify share API under /api/shares with RESTful paths (commit by @saltbo)a08ebca- config: consolidate tsconfig path aliases and remove redundancy (commit by @saltbo)9e56e92- share: remove unused folder browser (commit by @saltbo)257a6be- ui: address review feedback on layout unification (commit by @saltbo)41f3e45- api: enforce strict RESTful route conventions (commit by @saltbo)78f741c- replace presign+commit image flow with RESTful PUT/DELETE (PR #336 by @saltbo)faed8cb- admin: streamline admin navigation and licensing management (commit by @saltbo)bf7c338- site: centralize default site metadata (commit by @saltbo)a4f9e3f- proxy quota store through cloud (commit by @saltbo)11ab430- quota-store: unify orders and gift cards (commit by @saltbo)0365e50- store: centralize database write transactions (commit by @saltbo)bfc6978- admin: redesign branding settings card (commit by @saltbo)acc2e81- cloud-store: rename end user fields to consumer (commit by @saltbo)9efdcbb- cloud-store: use cloud sdk contracts (commit by @saltbo)3f7a859- downloader: consolidate api contract generation (commit by @saltbo)8f272b8- downloader: clarify task states and restart action (commit by @saltbo)f4acfc1- downloader: inspect runtime task state (commit by @saltbo)6aa711b- downloads: reshape download task status model (commit by @saltbo)f31278b- cli: move zpan command module to cmd (commit by @saltbo)25ab672- quota: centralize storage usage reservations (commit by @saltbo)d1c83cc- objects: run file operations sequentially (commit by @saltbo)
👷 Build System
4dddc9c- update the go version for the setup-go (commit by @saltbo)668bd01- update the version of runs-on (commit by @saltbo)2aa5730- update the go.sum (commit by @saltbo)d5d2f96- add arm7 builds support (PR #188 by @saltbo)e673fc6- add release workflow for tag-triggered Docker + GitHub Release (commit by @saltbo)b4545c5- add multi-arch Docker build support (amd64, arm64, arm/v7) (commit by @saltbo)f2f1482- drop linux/arm/v7 platform from Docker build (commit by @saltbo)3d8f51f- add fork-based deploy workflow for Cloudflare Workers (commit by @saltbo)cdc7a72- skip CI and release workflows on fork repositories (commit by @saltbo)e5555b2- simplify fork guards to root jobs only (commit by @saltbo)71bded2- deploy: auto-disable CI and Release workflows on fork (commit by @saltbo)64774b9- cf-deploy: auto-provision R2 public-images bucket + URL secret (commit by @saltbo)07973b6- deploy: fan-out dispatcher — one push, only configured platforms run (commit by @saltbo)b40b2bf- deps-dev: bump postcss from 8.5.9 to 8.5.10 (PR #351 by @dependabot[bot])f386fd2- deps: bump hono from 4.12.14 to 4.12.18 (PR #380 by @dependabot[bot])46008a1- cloud: serialize tunnel e2e jobs (commit by @saltbo)4ecccbb- release: provide cloud e2e credentials (commit by @saltbo)f341b96- test: exclude cloud e2e from default suite (commit by @saltbo)a8aa2e8- e2e: isolate cloud account binding (commit by @saltbo)a3b2146- e2e: run cloud runtimes in parallel (commit by @saltbo)312413d- deps: bump ws, @cloudflare/vite-plugin, @cloudflare/vitest-pool-workers, miniflare and wrangler (PR #402 by @dependabot[bot])30bc6e1- migrate project to pnpm (commit by @saltbo)5a64cbe- run e2e in playwright image (commit by @saltbo)f569368- skip playwright system deps in e2e (commit by @saltbo)d8feabe- use system chrome for e2e (commit by @saltbo)752c3cb- use real e2e server entrypoints (commit by @saltbo)4707e97- serialize cloud e2e jobs (commit by @saltbo)76d6158- stabilize cf cloud store e2e (commit by @saltbo)44fe744- use separate cloud e2e accounts (commit by @saltbo)2536095- serialize cloud e2e jobs (commit by @saltbo)bff1c94- e2e: skip live cloud test on Stripe rate limit (commit by @saltbo)745abb4- e2e: skip live cloud tunnel outages (commit by @saltbo)7c35d92- deps: bump hono from 4.12.18 to 4.12.21 (commit by @dependabot[bot])4c70a75- deps: bump better-auth from 1.6.2 to 1.6.14 (commit by @dependabot[bot])
🔧 Chores
7a663f2- deps: bump github.com/gin-gonic/gin from 1.6.3 to 1.7.0 (PR #125 by @dependabot[bot])4ce9171- minimal the static assets (commit by @saltbo)2b948a4- add .github/no-response.yml (commit by @saltbo)01a7479- add .github/no-response.yml v2 (commit by @saltbo)fa6d085- update the go-oauth (commit by @saltbo)423be73- deps: bump github.com/gin-gonic/gin from 1.7.0 to 1.7.7 (PR #178 by @dependabot[bot])3aff490- deps: bump github.com/gin-gonic/gin from 1.7.7 to 1.9.0 (PR #180 by @dependabot[bot])9e23250- update the go version (commit by @saltbo)a76ee8e- update the frontend assets (commit by @saltbo)d2549f7- update the Dockerfile for the goreleaser 1.20 (commit by @saltbo)bb40c65- deps: bump golang.org/x/net from 0.12.0 to 0.17.0 (PR #194 by @dependabot[bot])82b58e2- deps: bump golang.org/x/crypto from 0.14.0 to 0.17.0 (PR #198 by @dependabot[bot])38f5c31- deps: bump google.golang.org/protobuf from 1.30.0 to 1.33.0 (PR #200 by @dependabot[bot])520af87- deps: bump github.com/jackc/pgx/v5 from 5.3.0 to 5.5.4 (PR #201 by @dependabot[bot])3cee67e- deps: bump golang.org/x/net from 0.17.0 to 0.23.0 (PR #204 by @dependabot[bot])1646edc- add husky pre-commit hook with lint-staged (commit by @saltbo)2f7ef9f- strengthen infrastructure quality gates (commit by @saltbo)05b3b25- web: lower coverage threshold to 85% temporarily (commit by @saltbo)7c77731- update CI for npm, upgrade Node to 24 with volta pin (commit by @saltbo)d70295f- upgrade vite to 7.x and related plugins (commit by @saltbo)f9e8799- deps: bump esbuild and drizzle-kit (PR #274 by @dependabot[bot])9c8b1b7- deploy: harden wrangler config, add .dev.vars.example (commit by @saltbo)cdb17f5- docker: slim runtime image, include migrations (commit by @saltbo)0aef82b- remove stale pnpm-lock.yaml (commit by @saltbo)7d98848- deps: bump drizzle-orm to 0.45.2, drizzle-kit to 0.31.10 (commit by @saltbo)3d14f3c- dev: enhance db:reset for D1 local and add top-level D1 binding (commit by @saltbo)d110d6b- ci: upgrade actions to latest versions (Node.js 24 runtime) (commit by @saltbo)ca19a72- update compatibility_date to 2026-04-12 (commit by @saltbo)7b929fd- raise unit test coverage thresholds to 60% (commit by @saltbo)a99b136- add .claude/ and .tanstack/ to gitignore (commit by @saltbo)b0f1d4f- regenerate routeTree after ignoring test files (commit by @saltbo)9494403- regenerate routeTree after invite page addition (commit by @saltbo)bd4e950- add AGENTS.md (commit by @saltbo)0c813a9- deps: bump hono from 4.12.12 to 4.12.14 (PR #303 by @dependabot[bot])54c6104- admin: reorder sidebar settings link (commit by @saltbo)5b743cc- admin: polish licensing layout and labels (commit by @saltbo)b781652- deps: sync recent package updates (commit by @saltbo)eb1610b- deps: align Cloudflare test runtime (commit by @saltbo)02d88b0- cloud: point local dev at staging (commit by @saltbo)67bd16d- update package lock (commit by @saltbo)3eadf23- use pnpm in pre-commit hook (commit by @saltbo)
Docker
docker pull ghcr.io/saltbo/zpan:v2.7.0
docker pull ghcr.io/saltbo/zpan:v2.7.0-cli