Appearance
me.virmesh.asset.upload
asset を multipart で upload します。
プロフィール画像などの asset を multipart/form-data で直接 upload する private action です。
envelope part(JSON metadata + 署名)と file part(バイナリ)を 1 リクエストで送ります。
scope で asset の用途を指定し、server は scope に応じた contentType とサイズ上限を適用します。
v1 の me.virmesh.player.profileImage scope では image/png と image/jpeg のみ受け付けます。
Endpoint
Request schema
fromstringRequiredupload owner かつ署名検証に使う player identifier です。
payload.scopestringRequiredasset の用途を示す scope です。v1 では me.virmesh.player.profileImage を使います。
payload.contentTypestringRequiredupload する asset の content type です。scope ごとに許容値が異なります。
payload.sizeintegerRequiredupload する asset の byte size です。
payload.hashstringRequiredupload する asset body の hash です。v1 は sha256:<base64url> を使います。
payload.widthintegerOptional画像 asset の場合の pixel width です。
payload.heightintegerOptional画像 asset の場合の pixel height です。
signaturestringRequiredcanonical JSON of { action, from, payload } に対する対象 player 本人の署名です。
Request example
"------Boundary\nContent-Disposition: form-data; name=\"envelope\"\nContent-Type: application/json\n\n{\"from\":\"medi:player:ed25519:base64-public-key\",\"payload\":{\"scope\":\"me.virmesh.player.profileImage\",\"contentType\":\"image/png\",\"size\":42000,\"hash\":\"sha256:base64url-hash\",\"width\":512,\"height\":512},\"signature\":\"base64-signature-of-envelope\"}\n\n------Boundary\nContent-Disposition: form-data; name=\"file\"; filename=\"profile.png\"\nContent-Type: image/png\n\n<raw binary bytes>\n\n------Boundary--\n"Responses
200status+me.virmesh.success.assetUploadedasset の upload が完了したことを示します。
status+me.virmesh.success.assetUploadedasset の upload が完了したことを示します。
Response body
payload.assetIdstringRequired保存された asset を参照する identifier です。
payload.scopestringRequired保存された asset の scope です。
payload.contentTypestringRequired保存された asset の content type です。
payload.hashstringRequired保存された asset の hash です。
payload.sizeintegerRequired保存された asset の byte size です。
payload.widthintegerOptional画像 asset の pixel width です。
payload.heightintegerOptional画像 asset の pixel height です。
Response example
{
"status": "status+me.virmesh.success.assetUploaded",
"payload": {
"assetId": "profimg_123",
"scope": "me.virmesh.player.profileImage",
"contentType": "image/png",
"hash": "sha256:base64url-hash",
"size": 42000,
"width": 512,
"height": 512
}
}me.virmesh.asset.upload が正常終了し、
アセットが保存されて assetId が発行されたときに返します。
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 は me.virmesh.asset.upload または me.virmesh.player.updateProfile で、
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.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."
}
}409status+me.virmesh.player.image_ownership_mismatch指定した profile image asset が別 player の所有物であることを示します。
status+me.virmesh.player.image_ownership_mismatch指定した profile image asset が別 player の所有物であることを示します。
この status は me.virmesh.player.updateProfile で
他プレイヤーが upload した profile image asset を参照しようとした場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
image owner mismatch
{
"status": "status+me.virmesh.player.image_ownership_mismatch",
"payload": {
"message": "Profile image is owned by another player."
}
}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."
}
}422status+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."
}
}501status+me.virmesh.action.not_supported要求した action が現在の server では利用できないことを示します。
status+me.virmesh.action.not_supported要求した action が現在の server では利用できないことを示します。
指定されたactionがサーバー上で無効化されており、使用できないことを示します。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
action is disabled
{
"status": "status+me.virmesh.action.not_supported",
"payload": {
"message": "registerAccountKeyによる登録がサポートされていません。"
}
}