rip.pds.account.putServices

pds.rip

Schema Diff

+24 -15

From

CID
bafyreiakdl5bt4k...
Indexed At
2026-09-20 07:24 UTC
View this version

To

CID
bafyreicuaoyf2gs...
Indexed At
2026-09-20 07:50 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

7 breaking changes, 7 non-breaking changes.

Breaking Changes (7)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.type", kind: "prop", name: Some("type") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.id", kind: "prop", name: Some("id") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.serviceEndpoint", kind: "prop", name: Some("serviceEndpoint") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.endpoint", kind: "prop", name: Some("endpoint") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.fragment", kind: "prop", name: Some("fragment") }
  • RemovedVertex RemovedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.endpoint" }
  • RemovedVertex RemovedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.fragment" }
Non-Breaking Changes (7)
  • AddedVertex AddedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.id" }
  • AddedVertex AddedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.serviceEndpoint" }
  • AddedVertex AddedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.type" }
  • AddedVertex AddedVertex { vertex_id: "rip.pds.account.putServices:output.warnings" }
  • AddedVertex AddedVertex { vertex_id: "rip.pds.account.putServices:output.warnings:items" }
  • AddedEdge AddedEdge { src: "rip.pds.account.putServices:output", tgt: "rip.pds.account.putServices:output.warnings", kind: "prop", name: Some("warnings") }
  • AddedEdge AddedEdge { src: "rip.pds.account.putServices:output.warnings", tgt: "rip.pds.account.putServices:output.warnings:items", kind: "items", name: None }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.endpoint" }
  • RemovedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.fragment" }

Added Elements

  • AddedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.id" }
  • AddedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.serviceEndpoint" }
  • AddedVertex { vertex_id: "rip.pds.account.putServices#serviceEntry.type" }
  • AddedVertex { vertex_id: "rip.pds.account.putServices:output.warnings" }
  • AddedVertex { vertex_id: "rip.pds.account.putServices:output.warnings:items" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.type", kind: "prop", name: Some("type") }
  • Breaking: RequiredEdgeAdded { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.id", kind: "prop", name: Some("id") }
  • Breaking: RequiredEdgeAdded { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.serviceEndpoint", kind: "prop", name: Some("serviceEndpoint") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.endpoint", kind: "prop", name: Some("endpoint") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "rip.pds.account.putServices#serviceEntry", src: "rip.pds.account.putServices#serviceEntry", tgt: "rip.pds.account.putServices#serviceEntry.fragment", kind: "prop", name: Some("fragment") }
  • Non-breaking: AddedEdge { src: "rip.pds.account.putServices:output", tgt: "rip.pds.account.putServices:output.warnings", kind: "prop", name: Some("warnings") }
  • Non-breaking: AddedEdge { src: "rip.pds.account.putServices:output.warnings", tgt: "rip.pds.account.putServices:output.warnings:items", kind: "items", name: None }
1 1
{
2 2
  "id": "rip.pds.account.putServices",
3 3
  "defs": {
4 4
    "main": {
5 5
      "type": "procedure",
6 6
      "input": {
7 7
        "schema": {
8 8
          "type": "object",
9 9
          "required": [
10 10
            "did"
11 11
          ],
12 12
          "properties": {
13 13
            "did": {
14 14
              "type": "string",
15 15
              "format": "did"
16 16
            },
17 17
            "labelKey": {
18 18
              "type": "string",
19 19
              "description": "Public multikey published as #atproto_label, which a labeler signs its labels with. Required when a labeler entry is present. The private half is never sent here."
20 20
            },
21 21
            "services": {
22 22
              "type": "array",
23 23
              "items": {
24 24
                "ref": "#serviceEntry",
25 25
                "type": "ref"
26 26
              },
27 -
              "maxLength": 2,
28 -
              "description": "The complete set of service entries. Omit or pass an empty array to reset to the minimal document."
27 +
              "maxLength": 10,
28 +
              "description": "The complete set of service entries, in DID document shape. Omit or pass an empty array to reset to the minimal document."
29 29
            }
30 30
          }
31 31
        },
32 32
        "encoding": "application/json"
33 33
      },
34 34
      "errors": [
35 35
        {
36 36
          "name": "AccountNotFound",
37 37
          "description": "No live account with that DID was minted by the caller."
38 38
        },
39 39
        {
40 40
          "name": "NotAWebIdentity",
41 41
          "description": "The account is a did:plc, whose document this server cannot edit."
42 42
        },
43 43
        {
44 44
          "name": "InvalidRequest",
45 45
          "description": "A fragment, endpoint or label key was not acceptable."
46 46
        }
47 47
      ],
48 48
      "output": {
49 49
        "schema": {
50 50
          "type": "object",
51 51
          "required": [
52 52
            "did",
53 53
            "document",
54 54
            "services"
55 55
          ],
56 56
          "properties": {
57 57
            "did": {
58 58
              "type": "string",
59 59
              "format": "did"
60 60
            },
61 61
            "document": {
62 62
              "type": "unknown",
63 63
              "description": "The DID document as it will now be served."
64 64
            },
65 65
            "labelKey": {
66 66
              "type": "string"
67 67
            },
68 68
            "services": {
69 69
              "type": "array",
70 70
              "items": {
71 71
                "ref": "#serviceEntry",
72 72
                "type": "ref"
73 73
              }
74 74
            },
75 +
            "warnings": {
76 +
              "type": "array",
77 +
              "items": {
78 +
                "type": "string"
79 +
              },
80 +
              "description": "Advisory notes. A known fragment carrying an unexpected type publishes fine but is ignored by consumers that check the type."
81 +
            },
75 82
            "updatedAt": {
76 83
              "type": "string",
77 84
              "format": "datetime"
78 85
            }
79 86
          }
80 87
        },
81 88
        "encoding": "application/json"
82 89
      },
83 -
      "description": "Replace the service entries on a did:web account's DID document. The whole set is supplied each time, so an empty list resets the document to its minimal form. Only for did:web accounts the caller minted."
90 +
      "description": "Replace the service entries on a did:web account's DID document. The whole set is supplied each time, so an empty list resets the document to its minimal form. Any fragment and type are allowed except the ones this server manages. Only for did:web accounts the caller minted."
84 91
    },
85 92
    "serviceEntry": {
86 93
      "type": "object",
87 94
      "required": [
88 -
        "fragment",
89 -
        "endpoint"
95 +
        "id",
96 +
        "type",
97 +
        "serviceEndpoint"
90 98
      ],
91 99
      "properties": {
92 -
        "endpoint": {
100 +
        "id": {
93 101
          "type": "string",
94 -
          "format": "uri",
95 -
          "description": "An https URL. Private and local addresses are refused, because the document is read by other people's infrastructure."
102 +
          "description": "The fragment, written as '#my_service' or in full as 'did:web:host#my_service'. Fragments this server manages, '#atproto' and '#atproto_pds', cannot be set."
96 103
        },
97 -
        "fragment": {
104 +
        "type": {
98 105
          "type": "string",
99 -
          "description": "One of #bsky_fg or #atproto_labeler. The service type is derived from this rather than supplied. Fragments this server manages cannot be set.",
100 -
          "knownValues": [
101 -
            "#bsky_fg",
102 -
            "#atproto_labeler"
103 -
          ]
106 +
          "description": "The service type, for example 'BskyFeedGenerator'. Supplied rather than derived, so unrecognised types can be published."
107 +
        },
108 +
        "serviceEndpoint": {
109 +
          "type": "string",
110 +
          "format": "uri",
111 +
          "description": "An https URL. Private and local addresses are refused, because the document is read by other people's infrastructure."
104 112
        }
105 -
      }
113 +
      },
114 +
      "description": "A DID document service entry. Extra properties are permitted, as atproto tolerates them."
106 115
    }
107 116
  },
108 117
  "$type": "com.atproto.lexicon.schema",
109 118
  "lexicon": 1
110 119
}

Compare Other Versions

Lexicon Garden

@