Skip to content

me.virmesh.world.resolveWorld

world address または world id から署名付き world manifest を解決します。

WorldServer が保持する world を、人間向けの world address または canonical worldId から解決する public action です(単一のエントリポイント)。 world address は world 専用の人間向け識別子です。例: example.com/world。 player handle(例: [email protected])は me.virmesh.handle.resolveHandle で解決します。 必要に応じて versionId または manifest の hash で特定リビジョンを要求できます。versionIdhash は同時に指定しません。 クライアントは response の signature で core manifest を検証し、payload.modules 内の各 module も個別に検証してから表示情報や instance policy を使います。 解決後の handshake、instance 取得、署名検証では payload.manifest.worldId を使います。

draft

Endpoint

Method
GET
Path
/public/me.virmesh.world.resolveWorld
Auth
none
Host
VirMesh.WorldServer

Request schema

query.worldAddressstringOptional

解決する world address です。query.worldId とは同時指定できません。

query.worldIdstringOptional

解決する world identifier です。形式は medi:world:<scheme>:<publicKey> です。query.worldAddress とは同時指定できません。

query.versionIdstringOptional

特定の manifest version を要求します。query.hash とは同時指定しません。

query.hashstringOptional

特定の manifest hash を要求します。query.versionId とは同時指定しません。

Request example

{
  "query": {
    "worldAddress": "example.com/world"
  }
}

Responses

200
status+me.virmesh.success.worldResolved

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

Response body

payload.manifestworldManifestRequired

解決された world manifest です。

References obj+me.virmesh.world.manifest : key-authoritative world の署名対象 core manifest です。

worldIdstringRequired

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

schemastringRequired

manifest schema identifier です。v1 では obj+me.virmesh.world.manifest を使います。

versionIdstringRequired

manifest の immutable version identifier です。

endpointstringRequired

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

hostingDelegationworldHostingDelegationRequired

WorldServer がこの world の解決または live session hosting を委任されていることを示す署名付き object です。

References obj+me.virmesh.world.hostingDelegation : world identity key が WorldServer に hosting capability を委任した object です。

payload.worldIdstringRequired

委任元の world identifier です。形式は medi:world:<scheme>:<publicKey> です。

payload.serverstringRequired

委任先 WorldServer の absolute URL です。

payload.capabilitiesstring[]Required

委任する capability 一覧です。v1 では resolveManifesthostLiveSession を定義します。

payload.issuedAtintegerRequired

delegation を発行した epoch second です。

payload.expiresAtintegerOptional

delegation の任意の期限です。epoch second で表します。省略時は明示的に取り消されるまで有効な long-lived delegation として扱います。

signaturestringRequired

canonical JSON of payload に対する world identity key の署名です。

worldProtocolsobject[]Required

クライアントが live session に使える protocol 一覧です。各要素は name, version を持ちます。接続先やポートなどの instance 固有の値は、instance object 側の worldProtocols[].information に載せます。

worldProtocols[].namestringRequired

protocol identifier です。例: me.virmesh.world.websocket

worldProtocols[].versionstringRequired

protocol version です。

assetsobject[]Optional

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

assets[].kindstringRequired

scene などの asset 種別です。

assets[].contentTypestringRequired

HTTP content type です。

assets[].profilestringRequired

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

assets[].urlstringRequired

asset を取得する absolute URL です。

assets[].hashstringRequired

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

assets[].sizeintegerRequired

asset body の byte size です。

updated_atintegerRequired

manifest を更新した epoch second です。

signaturestringRequired

canonical JSON of payload.manifest に対する world identity key の署名です。

payload.modulesobjectOptional

world module map です。各 entry は { payload, signature } を持ち、module payload ごとに world identity key で署名されます。

Response example

{
  "payload": {
    "manifest": {
      "worldId": "medi:world:ed25519:base64url-world-public-key",
      "schema": "obj+me.virmesh.world.manifest",
      "versionId": "2026-04-26T00:00:00Z",
      "endpoint": "https://worlds.example.com/",
      "hostingDelegation": {
        "payload": {
          "worldId": "medi:world:ed25519:base64url-world-public-key",
          "server": "https://worlds.example.com/",
          "capabilities": [
            "resolveManifest",
            "hostLiveSession"
          ],
          "issuedAt": 1770000000
        },
        "signature": "base64-signature-by-world-key"
      },
      "worldProtocols": [
        {
          "name": "me.virmesh.world.websocket",
          "version": "1.0.0"
        }
      ],
      "updated_at": 1770000100
    },
    "modules": {
      "world+me.virmesh.world.profile": {
        "payload": {
          "module": "world+me.virmesh.world.profile",
          "worldId": "medi:world:ed25519:base64url-world-public-key",
          "name": "Example World",
          "description": "A small social world.",
          "tags": [
            "social",
            "music"
          ],
          "addresses": [
            "example.com/world"
          ],
          "updated_at": 1770000200
        },
        "signature": "base64-signature-by-world-key-for-profile-module"
      }
    }
  },
  "signature": "base64-signature-by-world-key"
}

この status は me.virmesh.world.resolveWorld が署名付き world manifest と任意の署名付き world module を返した場合に使います。

400
status+me.virmesh.http.invalid_query

query parameter の組み合わせまたは形式が不正であることを示します。

この status は route が期待する query parameter の条件を満たしていない場合に返ります。 resolveHandle では idhandle の同時指定、未指定、未知の key を拒否します。 resolveWorld では worldAddressworldId の同時指定、未指定、未知の key を拒否します。

Status payload

payload.messagestringRequired

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

handle query is ambiguous

{
  "status": "status+me.virmesh.http.invalid_query",
  "payload": {
    "message": "Specify exactly one of query.id or query.handle."
  }
}
404
status+me.virmesh.world.address_not_found

指定された world address が見つからないことを示します。

この status は query.worldAddress に対応する world manifest を WorldServer が保持していない場合に返ります。

Status payload

payload.messagestringRequired

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

world address is not found

{
  "status": "status+me.virmesh.world.address_not_found",
  "payload": {
    "message": "No world matched the requested address."
  }
}
404
status+me.virmesh.world.not_found

指定された world が見つからないことを示します。

この status は query.worldId に対応する world manifest を WorldServer が保持していない場合に返ります。

Status payload

payload.messagestringRequired

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

409
status+me.virmesh.world.hash_mismatch

requested hash と world manifest または asset の hash が一致しないことを示します。

この status は query.hash で要求された manifest hash が保存済み manifest と一致しない場合に返ります。 asset body の hash mismatch は通常、asset 取得側で検出します。

Status payload

payload.messagestringRequired

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

422
status+me.virmesh.world.invalid_manifest_signature

world manifest の署名検証に失敗したことを示します。

この status は WorldServer が保存している manifest 署名を検証できない場合、 hosting delegation の署名検証に失敗した場合、 または world module の署名検証に失敗した場合に返ります。

Status payload

payload.messagestringRequired

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

manifest signature failed

{
  "status": "status+me.virmesh.world.invalid_manifest_signature",
  "payload": {
    "message": "World manifest signature verification failed."
  }
}
422
status+me.virmesh.world.delegation_expired

world hosting delegation が期限切れであることを示します。

この status は hostingDelegation.payload.expiresAt が存在し、その期限を過ぎた manifest を WorldServer が返そうとした場合に使います。 クライアントも expiresAt が存在する場合だけ delegation の期限を検証します。

Status payload

payload.messagestringRequired

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

hosting delegation expired

{
  "status": "status+me.virmesh.world.delegation_expired",
  "payload": {
    "message": "The world hosting delegation has expired."
  }
}