Skip to content

me.virmesh.social.acceptFriendRequest

受信済み friend request を受理し、相互フレンドを成立させます。

一覧で取得した signed friend request object を参照入力として受ける private action です。 frompayload.friendRequest.requestTo と一致している必要があります。 payload.recipientSignature には canonical JSON of payload.friendRequest.friendPayload に対する recipient の署名を入れます。 payload.friendRequest.senderSignature は同じ friendPayload に対する sender の署名で、 top-level の signature は canonical JSON of { action, from, payload } に対する署名です。 server は両署名を同じ friendPayload に対して検証し、 双方署名済み friend object を生成します。 sender または recipient が tombstone 化済み account の場合は受理されません。

draft

Endpoint

Method
POST
Path
/private/me.virmesh.social.acceptFriendRequest
Auth
required
Host
VirMesh.PlayerServer

Request schema

fromstringRequired

action 実行者の player identifier です。payload.friendRequest.requestTo と一致している必要があります。

payload.friendRequestfriendRequestRequired

受理対象の signed friend request object です。

References obj+me.virmesh.social.friendRequest : future `friendPayload` を固定した sender 署名付き friend request object です。

senderstringRequired

フレンドリクエスト送信者の player identifier です。

requestTostringRequired

フレンドリクエスト受信者の player identifier です。

friendPayload.playerAstringRequired

future friend object における sender の player identifier です。

friendPayload.playerBstringRequired

future friend object における receiver の player identifier です。

senderSignaturestringRequired

canonical JSON of friendPayload に対する sender の署名です。

payload.recipientSignaturestringRequired

canonical JSON of payload.friendRequest.friendPayload に対する recipient の署名です。

signaturestringRequired

canonical JSON of { action, from, payload } に対する署名です。

Request example

{
  "from": "medi:player:ed25519:receiver-public-key",
  "payload": {
    "friendRequest": {
      "sender": "medi:player:ed25519:sender-public-key",
      "requestTo": "medi:player:ed25519:receiver-public-key",
      "friendPayload": {
        "playerA": "medi:player:ed25519:sender-public-key",
        "playerB": "medi:player:ed25519:receiver-public-key"
      },
      "senderSignature": "base64-signature-by-sender"
    },
    "recipientSignature": "base64-signature-by-receiver"
  },
  "signature": "base64-signature-for-action-envelope"
}

Responses

200
status+me.virmesh.success.friendRequestAccepted

friend request が受理され、相互フレンドが成立したことを示します。

Response body

payload.friendfriendRequired

受理結果として生成された、双方署名済みの mutual friend object です。

References obj+me.virmesh.social.friend : 双方署名済みの mutual friend relation object です。

friendPayload.playerAstringRequired

friend request sender の player identifier です。

friendPayload.playerBstringRequired

friend request receiver の player identifier です。

playerASignaturestringRequired

canonical JSON of friendPayload に対する friendPayload.playerA の署名です。

playerBSignaturestringRequired

canonical JSON of friendPayload に対する friendPayload.playerB の署名です。

Response example

{
  "status": "status+me.virmesh.success.friendRequestAccepted",
  "payload": {
    "friend": {
      "friendPayload": {
        "playerA": "medi:player:ed25519:sender-public-key",
        "playerB": "medi:player:ed25519:receiver-public-key"
      },
      "playerASignature": "base64-signature-by-sender",
      "playerBSignature": "base64-signature-by-receiver"
    }
  }
}

me.virmesh.social.acceptFriendRequest が正常終了し、 指定した pending friend request が消費されて、 双方署名済み mutual friend object が生成されたときに返ります。

400
status+me.virmesh.json.invalid_json

request body が JSON として解釈できないことを示します。

この status は body が壊れている、または JSON parser が受理できない形式で送られた場合に返ります。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

malformed json

{
  "status": "status+me.virmesh.json.invalid_json",
  "payload": {
    "message": "Request body must be valid JSON."
  }
}
400
status+me.virmesh.json.invalid_private_request

private 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."
  }
}
400
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."
  }
}
400
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": "送信されたペイロードが正しい形式ではありません。"
  }
}
401
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."
  }
}
404
status+me.virmesh.social.friend_request_not_found

指定した friend request object に対応する pending request が存在しないことを示します。

この status は参照入力として送られた signed friend request object と一致する pending request が見つからない場合に返ります。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

pending request not found

{
  "status": "status+me.virmesh.social.friend_request_not_found",
  "payload": {
    "message": "No pending friend request matched the provided object."
  }
}
409
status+me.virmesh.social.friend_request_recipient_mismatch

action 実行者と friend request object の requestTo が一致しないことを示します。

この status は受信者として扱うべき actor が payload.friendRequest.requestTo と一致しない場合に返ります。 主に acceptFriendRequestdeclineFriendRequest で使います。

Status payload

payload.messagestringRequired

不一致の内容を表す実装依存の詳細メッセージです。

recipient mismatch

{
  "status": "status+me.virmesh.social.friend_request_recipient_mismatch",
  "payload": {
    "message": "The acting player does not match friendRequest.requestTo."
  }
}
409
status+me.virmesh.social.already_friends

対象 pair はすでに mutual friend 関係にあることを示します。

この status は対象 pair がすでに相互フレンドとして登録済みで、pending request として扱えない場合に返ります。

Status payload

payload.messagestringRequired

実装依存の詳細メッセージです。

already mutual friends

{
  "status": "status+me.virmesh.social.already_friends",
  "payload": {
    "message": "The players are already friends."
  }
}
410
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."
  }
}
501
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による登録がサポートされていません。"
  }
}