memos/server/router/api/v1
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
..
test feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
acl_config.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
acl_config_test.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
ai_service.go refactor: split STT and Audio-LLM into separate interfaces (#5928) 2026-05-03 00:21:58 +08:00
attachment_exif_test.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
attachment_media_metadata.go feat: persist and display client media metadata (#6180) 2026-08-11 23:47:21 +08:00
attachment_media_metadata_test.go feat: persist and display client media metadata (#6180) 2026-08-11 23:47:21 +08:00
attachment_mime_test.go fix(attachment): detect heic/heif mime type from filename extension (#6246) 2026-08-30 09:09:53 +08:00
attachment_motion.go feat(attachments): add Live Photo and Motion Photo support (#5810) 2026-04-06 10:47:01 +08:00
attachment_service.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
attachment_service_image.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
attachment_service_storage.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
attachment_service_storage_test.go feat: support memo-scoped Markdown attachment images (#6169) 2026-08-09 23:27:18 +08:00
attachment_upload.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
attachment_upload_state.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
attachment_upload_test.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
attachment_upload_transport_test.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
auth_service.go fix(auth): provision SSO users atomically (#6114) 2026-07-25 09:47:16 +08:00
auth_service_client_info_test.go refactor: replace Split in loops with more efficient SplitSeq (#6187) 2026-08-16 21:46:16 +08:00
auth_service_session.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
auth_service_session_status_test.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
auth_service_sso.go feat(user): define username format and mention syntax (#6134) 2026-08-02 19:57:16 +08:00
authz.go feat(instance): persist access mode independently of URL (#6225) 2026-08-22 14:15:31 +08:00
authz_test.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
common.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
common_test.go fix(api): reduce memory pressure in backend paths 2026-04-16 23:08:48 +08:00
connect_handler.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
connect_handler_test.go fix(api): show clean RPC error messages 2026-07-18 11:20:15 +08:00
connect_interceptors.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
connect_interceptors_test.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
connect_services.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00
filter_access.go feat(spaces): add space-aware UI and filtering (#6230) 2026-08-24 23:13:55 +08:00
gateway_marshaler_test.go feat: persist and display client media metadata (#6180) 2026-08-11 23:47:21 +08:00
gateway_route_resolver.go fix(auth): enforce private instance access boundaries 2026-07-26 21:13:21 +08:00
gateway_route_resolver_test.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
header_carrier.go fix(backend): correct generic type parameter in withHeaderCarrier helper 2025-12-12 08:06:13 +08:00
health_service.go refactor(store): remove deprecated migration_history table and backward compatibility code 2025-12-01 22:54:30 +08:00
idp_service.go feat(config): provision settings from secret files 2026-07-13 22:34:24 +08:00
instance_service.go fix(settings): validate memo content length limit 2026-08-24 23:35:32 +08:00
instance_service_converters.go feat(instance): persist access mode independently of URL (#6225) 2026-08-22 14:15:31 +08:00
instance_service_validation.go fix(settings): validate memo content length limit 2026-08-24 23:35:32 +08:00
instance_stats.go feat(stats): admin instance resource statistics 2026-05-01 23:15:56 +08:00
instance_stats_test.go feat(stats): admin instance resource statistics 2026-05-01 23:15:56 +08:00
link_metadata_test.go feat(link-preview): support standards-based metadata (#6206) 2026-08-18 09:16:04 +08:00
memo_access.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_attachment_service.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_batch_helpers.go feat(mentions): add memo mention parsing, notifications, and rendering (#5811) 2026-04-06 22:16:53 +08:00
memo_comment_relations_test.go fix(memo): populate parent relation in comment webhook payload (#6083) 2026-07-12 17:23:58 +08:00
memo_create_helpers.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_create_helpers_test.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_delete_webhook_test.go feat(spaces): add consent-based member invitations (#6232) 2026-08-25 23:21:19 +08:00
memo_mention_helpers.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_relation_service.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_service.go fix(editor): preserve memo timestamp edits when closing popover 2026-09-07 09:25:51 +08:00
memo_service_comments.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_service_converter.go feat(memos): support moving memos between spaces (#6285) 2026-09-07 20:45:59 +08:00
memo_service_filter.go refactor: deprecate old filter 2025-07-22 21:25:57 +08:00
memo_service_link_metadata.go feat(link-preview): support standards-based metadata (#6206) 2026-08-18 09:16:04 +08:00
memo_service_query.go chore: reorganize backend and frontend modules 2026-07-12 17:59:12 +08:00
memo_service_webhooks.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_share_service.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_update_helpers.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
memo_view_service.go refactor(memo-views): replace shortcuts with saved views (#6167) 2026-08-09 20:27:27 +08:00
notification_email.go feat(notification): add smtp email settings 2026-05-01 18:48:21 +08:00
reaction_service.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
reaction_service_policy_test.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
resource_name.go feat(space): add client-defined UIDs and identity cues 2026-08-28 00:33:09 +08:00
resource_name_test.go feat(space): add client-defined UIDs and identity cues 2026-08-28 00:33:09 +08:00
space_icon_test.go feat(spaces): support custom icons and emoji (#6287) 2026-09-07 23:12:18 +08:00
space_service.go feat(spaces): support custom icons and emoji (#6287) 2026-09-07 23:12:18 +08:00
space_service_converters.go feat(spaces): support custom icons and emoji (#6287) 2026-09-07 23:12:18 +08:00
space_service_notifications.go feat(spaces): deliver invitations to the inbox (#6266) 2026-09-04 08:58:49 +08:00
space_service_test.go feat(spaces): deliver invitations to the inbox (#6266) 2026-09-04 08:58:49 +08:00
sse_handler.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
sse_hub.go feat(spaces): add settings management (#6234) 2026-08-26 22:20:40 +08:00
sse_hub_test.go feat(spaces): add settings management (#6234) 2026-08-26 22:20:40 +08:00
sse_service_test.go feat(spaces): add settings management (#6234) 2026-08-26 22:20:40 +08:00
sso_username.go feat(user): define username format and mention syntax (#6134) 2026-08-02 19:57:16 +08:00
sso_username_test.go fix(api): update UID compatibility 2026-07-20 19:41:55 +08:00
user_resource_name.go feat(user): define username format and mention syntax (#6134) 2026-08-02 19:57:16 +08:00
user_resource_name_test.go feat(user): define username format and mention syntax (#6134) 2026-08-02 19:57:16 +08:00
user_service.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
user_service_access_tokens.go chore: reorganize backend and frontend modules 2026-07-12 17:59:12 +08:00
user_service_converters.go feat: persist and display client media metadata (#6180) 2026-08-11 23:47:21 +08:00
user_service_filter.go chore: reorganize backend and frontend modules 2026-07-12 17:59:12 +08:00
user_service_identities.go chore: reorganize backend and frontend modules 2026-07-12 17:59:12 +08:00
user_service_notifications.go feat(spaces): deliver invitations to the inbox (#6266) 2026-09-04 08:58:49 +08:00
user_service_settings.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
user_service_stats.go feat(spaces): add space-aware UI and filtering (#6230) 2026-08-24 23:13:55 +08:00
user_service_webhooks.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
user_webhook_test.go feat(spaces): add multi-space memo collaboration (#6228) 2026-08-23 19:36:50 +08:00
v1.go feat(attachment): upload files in resumable chunks 2026-09-08 21:07:06 +08:00