memos/web
boojack b3e67399b8 feat(attachment): upload files in resumable chunks
Add UploadAttachment, a unary RPC that accepts a file in bounded chunks
and streams it to a temp file instead of holding the whole blob in one
request body and in memory. A call carrying a spec starts an upload and
returns an opaque upload_id; later calls carry that id with
write_offset,
data, and finish_write, following the Cloud Storage WriteObject shape.
Retrying the last chunk after a lost response is idempotent, uploads are
bound to their owner, and they expire after 30 minutes of inactivity.

CreateAttachment and the chunked finalize now share one processing
pipeline for motion-photo detection, EXIF stripping, and storage. The
motion-photo detector works over an io.ReaderAt so large JPEGs are never
loaded whole, and the request body cap is a single per-procedure lookup.

The web editor uploads through the new RPC in 2 MiB chunks with bounded
concurrency under the server's per-user limit.
2026-09-08 21:07:06 +08:00
..
docs refactor(react-query): optimize config, add error boundary, and remove JSDoc 2025-12-25 08:47:36 +08:00
patches feat(markdown): unify tag syntax and recognition (#6132) 2026-08-02 14:46:04 +08:00
public enhance: polish PWA manifest and meta tags (#5695) 2026-03-07 14:02:13 +08:00
scripts feat(markdown): unify tag syntax and recognition (#6132) 2026-08-02 14:46:04 +08:00
src feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
tests feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
.gitignore chore: streamline ignore rules 2026-08-22 10:34:28 +08:00
biome.json refactor: remove MemoContentContext and integrate MemoViewContext 2025-12-28 12:46:12 +08:00
components.json feat: themes (#4824) 2025-07-07 20:13:22 +08:00
index.html enhance: polish PWA manifest and meta tags (#5695) 2026-03-07 14:02:13 +08:00
package.json chore(web): bump CodeMirror packages 2026-09-03 23:43:38 +08:00
pnpm-lock.yaml chore(web): bump CodeMirror packages 2026-09-03 23:43:38 +08:00
pnpm-workspace.yaml feat(markdown): unify tag syntax and recognition (#6132) 2026-08-02 14:46:04 +08:00
tsconfig.json feat(web): add a global memo composer to the sidebar (#6219) 2026-08-21 21:14:28 +08:00
vite.config.mts perf: lazy load heavy first-screen dependencies (#5947) 2026-05-12 20:11:39 +08:00
vitest.config.mts refactor(web/routing): guard-based auth flow, migrate tests to Vitest (#5848) 2026-04-18 01:06:54 +08:00