Appearance
Profile Images
Player profile image は PlayerServer 内に保持する immutable asset として扱います。
v1 では画像 URL を profile payload に直接入れません。client は me.virmesh.player.prepareProfileImageUpload で upload を予約し、raw route へ binary body を送信してから、me.virmesh.player.updateProfile の profile+me.virmesh.player.card module で参照を貼ります。
Flow
me.virmesh.player.prepareProfileImageUploadに metadata を送る。- server から
assetIdと 1 回限りのuploadTokenを受け取る。 PUT /uploads/profile-images/:uploadTokenに raw binary body を送る。me.virmesh.player.updateProfileでprofile+me.virmesh.player.cardmodule のimageに asset metadata を設定する。- public profile 取得後、
handle.record.playerServer + /profile-images/:assetIdから画像を読む。
Prepare Upload
private action me.virmesh.player.prepareProfileImageUpload は画像本体を受け取らず、次の metadata だけを受け取ります。
contentTypesizehashwidthheightupdated_at
response には assetId、uploadToken、uploadMethod、uploadPath、expiresAt が入ります。
Binary Upload Route
予約済みの画像本体は raw route に PUT します。
text
PUT /uploads/profile-images/:uploadToken
Content-Type: image/png | image/jpeg
Body: raw binary bytesserver は prepared upload と照合して次を検証します。
- token が存在し、失効していない
- body size が
prepareProfileImageUploadのsizeと一致する - body hash が
prepareProfileImageUploadのhashと一致する
成功時は status+me.virmesh.success.profileImageUploaded を返します。
Public Fetch Route
保存済み asset は public route から取得します。
text
GET /profile-images/:assetIdこの route は immutable asset を返します。レスポンスの Content-Type は保存済み metadata に従います。
profile payload には URL が入らないため、client は me.virmesh.player.resolveProfile で得た handle.record.playerServer を使って取得 URL を組み立てます。
text
{handle.record.playerServer}/profile-images/{assetId}Constraints
- v1 の対応形式は
image/pngとimage/jpeg - asset は public-only
- 画像参照は owner 自身の upload 済み asset だけ許可
profile+me.virmesh.player.cardmodule では metadata 一致も検証される