Appearance
me.virmesh.player.prepareProfileImageUpload
PlayerServer 内部に保存するプロフィール画像 upload を予約します。
プロフィール画像 upload の準備を行う private action です。
この action は画像本体を直接受け取らず、metadata を署名付き request として受け取り、
1 回限りの uploadToken と binary upload 用 URL を返します。
client は返却された uploadPath に raw binary body を PUT し、
upload 完了後に me.virmesh.player.updateProfile の profile+me.virmesh.player.card module から画像参照を貼ります。
v1 の content type は image/png と image/jpeg のみです。
Endpoint
Request schema
fromstringRequiredupload owner かつ署名検証に使う player identifier です。
payload.contentTypestringRequired予約する画像 content type です。v1 は image/png または image/jpeg を受け付けます。
payload.sizeintegerRequiredupload 予定の byte size です。
payload.hashstringRequiredupload 予定の画像 body hash です。v1 は sha256:<base64url> を使います。
payload.widthintegerRequired画像の pixel width です。
payload.heightintegerRequired画像の pixel height です。
payload.updated_atintegerRequiredrequest signing に使う epoch second です。
signaturestringRequiredcanonical JSON of { action, from, payload } に対する対象 player 本人の署名です。
Request example
{
"from": "medi:player:ed25519:base64-public-key",
"payload": {
"contentType": "image/png",
"size": 42000,
"hash": "sha256:base64url-hash",
"width": 512,
"height": 512,
"updated_at": 1770000100
},
"signature": "base64-signature-by-player-for-request-envelope"
}Responses
200status+me.virmesh.success.profileImageUploadPreparedprofile image upload の準備が完了したことを示します。
status+me.virmesh.success.profileImageUploadPreparedprofile image upload の準備が完了したことを示します。
Response body
payload.assetIdstringRequiredupload 成功後に profileImage object で参照する asset identifier です。
payload.uploadTokenstringRequired1 回限りの binary upload token です。
payload.uploadMethodstringRequiredv1 では常に PUT を返します。
payload.uploadPathstringRequiredraw binary upload に使う absolute URL です。
payload.expiresAtintegerRequiredupload token の失効時刻です。epoch second を返します。
Response example
{
"payload": {
"assetId": "profimg_123",
"uploadToken": "550e8400-e29b-41d4-a716-446655440000",
"uploadMethod": "PUT",
"uploadPath": "https://ps.example.com/uploads/profile-images/550e8400-e29b-41d4-a716-446655440000",
"expiresAt": 1770001000
},
"status": "status+me.virmesh.success.profileImageUploadPrepared"
}me.virmesh.player.prepareProfileImageUpload が正常終了し、
uploadToken と uploadPath が発行されたときに返します。
400status+me.virmesh.json.invalid_payload`payload`がactionの期待する形式ではないことを示します。
status+me.virmesh.json.invalid_payload`payload`がactionの期待する形式ではないことを示します。
リクエストデータ自体はJSON objectとして解釈できたものの、 期待する形式と一致しない場合に使います。
Status payload
payload.messagestringRequired検証に失敗した理由を表す詳細メッセージです。
invalid payload
{
"status": "status+me.virmesh.json.invalid_payload",
"payload": {
"message": "送信されたペイロードが正しい形式ではありません。"
}
}400status+me.virmesh.json.invalid_private_requestprivate request envelope の形式が不正であることを示します。
status+me.virmesh.json.invalid_private_requestprivate request envelope の形式が不正であることを示します。
この status は private route が期待する from, payload, signature などの envelope 要件を満たさない場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
invalid private envelope
{
"status": "status+me.virmesh.json.invalid_private_request",
"payload": {
"message": "Private request must contain the expected envelope fields."
}
}400status+me.virmesh.json.unexpected_fields許可されていない field が request に含まれていることを示します。
status+me.virmesh.json.unexpected_fields許可されていない field が request に含まれていることを示します。
この status は strict validation が有効な route に未知の top-level field または payload field を送った場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
unexpected request fields
{
"status": "status+me.virmesh.json.unexpected_fields",
"payload": {
"message": "Request contains unknown fields that are not allowed by this route."
}
}400status+me.virmesh.player.invalid_profile_imageプロフィール画像 metadata または upload 内容が不正であることを示します。
status+me.virmesh.player.invalid_profile_imageプロフィール画像 metadata または upload 内容が不正であることを示します。
この status はプロフィール画像の prepare / upload / reference 貼り付けで、 content type、size、hash、dimensions、metadata 一致条件のいずれかを満たさない場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
profile image is invalid
{
"status": "status+me.virmesh.player.invalid_profile_image",
"payload": {
"message": "Profile image metadata does not match the uploaded asset."
}
}400status+me.virmesh.player.invalid_timestamp`updated_at` が有効な epoch second ではないことを示します。
status+me.virmesh.player.invalid_timestamp`updated_at` が有効な epoch second ではないことを示します。
この status は profile update family の payload.updated_at が
non-negative integer として解釈できない場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
updated_at is invalid
{
"status": "status+me.virmesh.player.invalid_timestamp",
"payload": {
"message": "payload.updated_at must be a non-negative integer epoch second."
}
}400status+me.virmesh.player.timestamp_in_future`updated_at` が server 時刻より未来であることを示します。
status+me.virmesh.player.timestamp_in_future`updated_at` が server 時刻より未来であることを示します。
この status は profile update family の timestamp が server の現在時刻を超えている場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
updated_at is in the future
{
"status": "status+me.virmesh.player.timestamp_in_future",
"payload": {
"message": "payload.updated_at must not be in the future."
}
}400status+me.virmesh.player.timestamp_out_of_range`updated_at` が freshness window を超えて古いことを示します。
status+me.virmesh.player.timestamp_out_of_range`updated_at` が freshness window を超えて古いことを示します。
この status は profile update family の timestamp が server の許容範囲より古い場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
updated_at is too old
{
"status": "status+me.virmesh.player.timestamp_out_of_range",
"payload": {
"message": "payload.updated_at is outside the supported epoch-second range."
}
}400status+me.virmesh.key.unsupported_keytype送信された鍵種別がそのサーバーでサポートされていないことを示します。
status+me.virmesh.key.unsupported_keytype送信された鍵種別がそのサーバーでサポートされていないことを示します。
指定された鍵方式にサーバーが対応しておらず、リクエストを処理できないことを示します。
例えば、action が ed25519 鍵を要求しているにもかかわらず、クライアントが secp256k1 鍵を送信した場合などに返されます。
Status payload
payload.messagestringRequired未対応であることを示すメッセージです。
unsupported key type
{
"status": "status+me.virmesh.key.unsupported_keytype",
"payload": {
"message": "送信された鍵の種類はサポートされていません。"
}
}401status+me.virmesh.key.invalid_signature署名の形式が不正、または署名検証に失敗したことを示します。
status+me.virmesh.key.invalid_signature署名の形式が不正、または署名検証に失敗したことを示します。
この status は署名文字列が base64 として不正な場合と、 復元できた署名が検証に失敗した場合に使われます。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
signature verification failed
{
"status": "status+me.virmesh.key.invalid_signature",
"payload": {
"message": "Signature verification failed."
}
}404status+me.virmesh.account.not_known指定した account をその server が既知の永続 state として保持していないことを示します。
status+me.virmesh.account.not_known指定した account をその server が既知の永続 state として保持していないことを示します。
この status は me.virmesh.account.disableAccount を受けた server が、
対象 account に関する永続 state を持っていない場合に返ります。
v1 では未知 account に対する tombstone record の先行作成は行いません。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
account not known
{
"status": "status+me.virmesh.account.not_known",
"payload": {
"message": "The requested account is not known to this server."
}
}410status+me.virmesh.account.disabled対象 account が tombstone 化済みであり、有効な主体または参照先として扱えないことを示します。
status+me.virmesh.account.disabled対象 account が tombstone 化済みであり、有効な主体または参照先として扱えないことを示します。
この status は account が disable 済みで、以後の更新、social 操作、migration、
公開 profile / handle 解決の対象として受理されない場合に返ります。
通常は HTTP 410 Gone と組み合わせて返します。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
account disabled
{
"status": "status+me.virmesh.account.disabled",
"payload": {
"message": "The requested account has been disabled and tombstoned."
}
}