bluesky-social / atproto

Social networking technology created by Bluesky
Other
6.88k stars 486 forks source link

ATProto-specific types are not defined in JSON-LD processing of DID documents #3028

Open trwnh opened 4 days ago

trwnh commented 4 days ago

Describe the bug

Types such as AtprotoPersonalDataServer or AtprotoLabeler

To Reproduce

Look at an existing DID document intended for usage with ATProto, e.g. https://web.plc.directory/did/did:plc:ewvi7nxzyoun6zhxrhs64oiz

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/multikey/v1",
    "https://w3id.org/security/suites/secp256k1-2019/v1"
  ],
  "alsoKnownAs": [
    "at://atproto.com"
  ],
  "id": "did:plc:ewvi7nxzyoun6zhxrhs64oiz",
  "service": [
    {
      "id": "#atproto_pds",
      "serviceEndpoint": "https://enoki.us-east.host.bsky.network",
      "type": "AtprotoPersonalDataServer"
    }
  ],
  "verificationMethod": [
    {
      "controller": "did:plc:ewvi7nxzyoun6zhxrhs64oiz",
      "id": "did:plc:ewvi7nxzyoun6zhxrhs64oiz#atproto",
      "publicKeyMultibase": "zQ3shunBKsXixLxKtC5qeSG9E4J5RkGN57im31pcTzbNQnm5w",
      "type": "Multikey"
    }
  ]
}

Expected behavior

Any and all types like AtprotoPersonalDataServer, AtprotoLabeler, etc. should be IRIs, not literal strings.

Additional context

From JSON-LD 1.1: https://www.w3.org/TR/json-ld11/#specifying-the-type

In Linked Data, types are uniquely identified with an IRI.

From JSON-LD 1.1: https://www.w3.org/TR/json-ld11/#keywords

The @type keyword MAY be aliased and MAY be used as a key in a node object or a value object, where its value MUST be a term, IRI reference, or a compact IRI (including blank node identifiers).

From DID Core 1.1: https://w3c.github.io/did-core/#json-ld

A conforming producer that generates a JSON-LD representation SHOULD NOT produce a DID document that contains terms not defined via the @context