Appearance
me.virmesh.player.updateProfile
1つの profile module を部分更新し、署名済み module payload として保存します。
player profile module を 1 回につき 1 module だけ更新する private action です。
request は { from, payload, signature } の private envelope を使いますが、
signature は request envelope ではなく、patch 適用後に保存される module payload そのものに対する対象 player 本人の署名です。
v1 では profile+me.virmesh.player.displayName と
profile+me.virmesh.player.card をサポートします。
displayName module は公開プロフィールの必須 module で、
profileCard module は bio と image を持つ optional module です。
Endpoint
Request schema
fromstringRequired更新対象かつ署名検証に使う player identifier です。
payload.modulestringRequired更新する module id です。v1 は profile+me.virmesh.player.displayName または profile+me.virmesh.player.card を受け付けます。
payload.setobjectOptionalmodule に対して設定または置換する field 群です。field は module ごとに制限されます。
payload.unsetstring[]Optionalmodule から削除する field 名一覧です。v1 では displayName module に対する unset は許可しません。
payload.base_updated_atintegerOptional楽観的排他に使う current module version です。送る場合、server 側の current updated_at と一致しない更新は reject されます。
payload.updated_atintegerRequired保存する次の module payload の version timestamp です。epoch second を送ります。
signaturestringRequiredpatch 適用後に保存される module payload の canonical JSON に対する対象 player 本人の署名です。
Request example
{
"from": "medi:player:ed25519:base64-public-key",
"payload": {
"module": "profile+me.virmesh.player.card",
"set": {
"bio": "VR world builder",
"image": {
"assetId": "profimg_123",
"contentType": "image/png",
"hash": "sha256:base64url-hash",
"width": 512,
"height": 512,
"size": 42000
}
},
"unset": [
"headline"
],
"updated_at": 1770000200
},
"signature": "base64-signature-by-player-for-resulting-module-payload"
}Responses
200status+me.virmesh.success.playerProfileUpdatedprofile module が保存または更新されたことを示します。
status+me.virmesh.success.playerProfileUpdatedprofile module が保存または更新されたことを示します。
me.virmesh.player.updateProfile が正常終了し、
指定した player の profile module record が保存または更新されたときに返します。
profile module updated
{
"status": "status+me.virmesh.success.playerProfileUpdated"
}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_bio`bio` が許容される形式ではないことを示します。
status+me.virmesh.player.invalid_bio`bio` が許容される形式ではないことを示します。
この status は profile+me.virmesh.player.card module の bio が
protocol の最小ルールを満たさない場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
bio is invalid
{
"status": "status+me.virmesh.player.invalid_bio",
"payload": {
"message": "Bio must be between 1 and 280 characters after trim."
}
}400status+me.virmesh.player.invalid_display_name`displayName` が許容される形式ではないことを示します。
status+me.virmesh.player.invalid_display_name`displayName` が許容される形式ではないことを示します。
この status は me.virmesh.player.updateProfile で
profile+me.virmesh.player.displayName module の displayName が
プロトコルの最小ルールを満たさない場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
displayName is invalid
{
"status": "status+me.virmesh.player.invalid_display_name",
"payload": {
"message": "displayName must be 1-64 characters after trim and must not contain control characters."
}
}400status+me.virmesh.player.invalid_module指定した profile module または module field が protocol で許可されていないことを示します。
status+me.virmesh.player.invalid_module指定した profile module または module field が protocol で許可されていないことを示します。
この status は me.virmesh.player.updateProfile で
未知の module id、許可されていない field、または必須 field を欠いた module payload を送った場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
invalid profile module
{
"status": "status+me.virmesh.player.invalid_module",
"payload": {
"message": "Unknown profile module or field."
}
}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."
}
}409status+me.virmesh.player.stale_update既存 record より古い profile module update であることを示します。
status+me.virmesh.player.stale_update既存 record より古い profile module update であることを示します。
この status は保存済み profile module record より古い updated_at を送った場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
profile update is stale
{
"status": "status+me.virmesh.player.stale_update",
"payload": {
"message": "A newer profile module record already exists."
}
}409status+me.virmesh.player.timestamp_conflict同一 `updated_at` に対して異なる profile module payload が送られたことを示します。
status+me.virmesh.player.timestamp_conflict同一 `updated_at` に対して異なる profile module payload が送られたことを示します。
この status は保存済み profile module record と同じ updated_at を使いながら、内容が一致しない場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
same timestamp with different content
{
"status": "status+me.virmesh.player.timestamp_conflict",
"payload": {
"message": "A different profile module payload already exists for this updated_at value."
}
}409status+me.virmesh.player.image_not_uploaded指定した profile image asset がまだ upload 完了していないことを示します。
status+me.virmesh.player.image_not_uploaded指定した profile image asset がまだ upload 完了していないことを示します。
この status は me.virmesh.player.updateProfile で
profile+me.virmesh.player.card module に画像参照を貼る際、
対応する asset が upload 完了していない場合に返ります。
Status payload
payload.messagestringRequired実装依存の詳細メッセージです。
image is not uploaded yet
{
"status": "status+me.virmesh.player.image_not_uploaded",
"payload": {
"message": "Profile image must be uploaded before it can be referenced."
}
}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."
}
}