Skip to content

status+me.virmesh.success.avatarResolved

avatar manifest が正常に解決されたことを示します。

successdraft

Description

この status は me.virmesh.avatar.resolveAvatar が署名付き avatar manifest を返した場合に使います。 private avatar の場合は、有効な fetchGrant が検証済みです。

When this happens

  • public avatar manifest が解決された
  • private avatar manifest が有効な fetchGrant により解決された

Payload

payload.manifestavatarManifestRequired

解決された avatar manifest です。

References obj+me.virmesh.avatar.manifest : AvatarServer が返す署名対象の avatar manifest です。

avatarIdstringRequired

avatar identifier です。形式は medi:avatar:<scheme>:<publicKey> です。

versionIdstringRequired

manifest の immutable version identifier です。

endpointstringRequired

この manifest を解決する AvatarServer の absolute URL です。

namestringRequired

表示用の avatar 名です。

visibilitystringRequired

public または private です。

publisherDelegationavatarPublisherDelegationRequired

publisher が avatar 鍵をこの avatar 用に委任したことを示す署名付き object です。

References obj+me.virmesh.avatar.publisherDelegation : publisher が avatar 鍵と publisher identity の対応を署名した object です。

payload.avatarIdstringRequired

委任先の avatar identifier です。

payload.publisher.idstringRequired

publisher の player identifier です。

payload.publisher.handlestringOptional

publisher の表示用 handle snapshot です。

payload.issuedAtintegerRequired

delegation を発行した epoch second です。

payload.expiresAtintegerOptional

delegation の任意の期限です。epoch second で表します。

signaturestringRequired

canonical JSON of payload に対する publisher の署名です。

assetsobject[]Required

model などの重い asset entry 一覧です。各 entry は kind, contentType, profile, url, hash, size を持ちます。

assets[].kindstringRequired

model などの asset 種別です。

assets[].contentTypestringRequired

HTTP content type です。

assets[].profilestringRequired

vrm, glb, gltf などの実装 profile です。

assets[].urlstringRequired

asset を取得する absolute URL です。private avatar では、fetchGrant を再送せずに使える短命 signed URL または grant-bound URL にします。

assets[].hashstringRequired

asset body の content hash です。v1 では sha256:<base64url> を使います。

assets[].sizeintegerRequired

asset body の byte size です。

thumbnailobjectOptional

任意の thumbnail asset entry です。contentType, profile, url, hash, size を持ちます。

purchaseReceiptavatarPurchaseReceiptOptional

wearer が提示する任意の購入 receipt claim です。

References obj+me.virmesh.avatar.purchaseReceipt : seller が buyer に対して発行した avatar purchase receipt claim です。

payload.avatarIdstringRequired

購入対象の avatar identifier です。

payload.shopUrlstringRequired

購入元ショップページの absolute URL です。

payload.seller.idstringRequired

seller の player identifier です。

payload.seller.handlestringOptional

seller の表示用 handle snapshot です。

payload.buyer.idstringRequired

buyer の player identifier です。

payload.buyer.handlestringOptional

buyer の表示用 handle snapshot です。

payload.issuedAtintegerRequired

receipt を発行した epoch second です。

signaturestringRequired

canonical JSON of payload に対する seller の署名です。

scriptavatarScriptSandboxOptional

任意の WASM script と sandbox policy です。

References obj+me.virmesh.avatar.scriptSandbox : avatar WASM script と v1 sandbox policy を表す object です。

urlstringRequired

WASM binary を取得する absolute URL です。

hashstringRequired

WASM binary body の content hash です。v1 では sha256:<base64url> を使います。

permissionsstring[]Required

script が要求する permission token 一覧です。v1 では avatar.self など低権限の token に限定します。

sandbox.runtimestringRequired

v1 では wasm です。

sandbox.networkbooleanRequired

network access を許可するかです。v1 では false です。

sandbox.filesystembooleanRequired

filesystem access を許可するかです。v1 では false です。

sandbox.worldMutationbooleanRequired

world state mutation を許可するかです。v1 では false です。

sandbox.maxMemoryBytesintegerRequired

script に許可する最大 memory byte 数です。

sandbox.maxExecutionMillisintegerRequired

1 tick または 1 call あたりの最大実行時間です。

signaturestringRequired

canonical JSON of payload.manifest に対する avatar 鍵の署名です。

Examples

avatar resolved

{
  "payload": {
    "manifest": {
      "avatarId": "medi:avatar:ed25519:avatar-public-key",
      "versionId": "2026-04-11T00:00:00Z",
      "endpoint": "https://avatars.example.com/",
      "name": "Alice Avatar",
      "visibility": "public",
      "publisherDelegation": {
        "payload": {
          "avatarId": "medi:avatar:ed25519:avatar-public-key",
          "publisher": {
            "id": "medi:player:ed25519:publisher-public-key",
            "handle": "alice@virmesh.me"
          },
          "issuedAt": 1770000000
        },
        "signature": "base64-signature-by-publisher"
      },
      "assets": [
        {
          "kind": "model",
          "contentType": "model/gltf-binary",
          "profile": "glb",
          "url": "https://cdn.example.com/avatars/avatar.glb",
          "hash": "sha256:base64url-hash",
          "size": 2480000
        }
      ]
    }
  },
  "signature": "base64-signature-by-avatar-key"
}

Client handling

  • payload.manifest を response signature と合わせて検証してから使う
  • publisherDelegation.payloadpublisherDelegation.signature と合わせて検証してから表示する
  • asset 取得後に manifest 内の hash と一致することを確認する

Related statuses

Referenced by

HTTPAPIAction
200me.virmesh.avatar.resolveAvatarme.virmesh.avatar.resolveAvatar