rip.pds.admin.defs

pds.rip

Schema Diff

+10 -5

From

CID
bafyreiatzdok5vu...
Indexed At
2026-09-24 02:27 UTC
View this version

To

CID
bafyreignvwubwh4...
Indexed At
2026-09-24 02:56 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

2 breaking changes, 2 non-breaking changes.

Breaking Changes (2)
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "rip.pds.admin.defs#ownerView", src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.lastCreatedAt", kind: "prop", name: Some("lastCreatedAt") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "rip.pds.admin.defs#ownerView", src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.firstSeenAt", kind: "prop", name: Some("firstSeenAt") }
Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "rip.pds.admin.defs#ownerView.lastSeenAt" }
  • AddedEdge AddedEdge { src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.lastSeenAt", kind: "prop", name: Some("lastSeenAt") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "rip.pds.admin.defs#ownerView.lastSeenAt" }

Additional Notes

  • Breaking: RequiredEdgeRemoved { vertex_id: "rip.pds.admin.defs#ownerView", src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.lastCreatedAt", kind: "prop", name: Some("lastCreatedAt") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "rip.pds.admin.defs#ownerView", src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.firstSeenAt", kind: "prop", name: Some("firstSeenAt") }
  • Non-breaking: AddedEdge { src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.lastSeenAt", kind: "prop", name: Some("lastSeenAt") }
1 1
{
2 2
  "id": "rip.pds.admin.defs",
3 3
  "defs": {
4 4
    "eventView": {
5 5
      "type": "object",
6 6
      "required": [
7 7
        "id",
8 8
        "type",
9 9
        "source",
10 10
        "createdAt"
11 11
      ],
12 12
      "properties": {
13 13
        "id": {
14 14
          "type": "integer"
15 15
        },
16 16
        "did": {
17 17
          "type": "string",
18 18
          "format": "did"
19 19
        },
20 20
        "type": {
21 21
          "type": "string",
22 22
          "knownValues": [
23 23
            "account.created",
24 24
            "account.deleted",
25 25
            "account.takedown",
26 26
            "account.restored",
27 27
            "account.labeled",
28 28
            "handle.changed",
29 29
            "identity.retired"
30 30
          ]
31 31
        },
32 32
        "detail": {
33 33
          "type": "string",
34 34
          "description": "The event's payload as JSON, for anything the fields above do not carry."
35 35
        },
36 36
        "handle": {
37 37
          "type": "string",
38 38
          "description": "The handle that DID held, when it is still known."
39 39
        },
40 40
        "source": {
41 41
          "type": "string",
42 42
          "description": "What observed it.",
43 43
          "knownValues": [
44 44
            "proxy",
45 45
            "firehose",
46 46
            "scheduler",
47 47
            "admin",
48 48
            "labeler"
49 49
          ]
50 50
        },
51 51
        "createdAt": {
52 52
          "type": "string",
53 53
          "format": "datetime"
54 54
        }
55 55
      },
56 56
      "description": "One recorded lifecycle fact."
57 57
    },
58 58
    "ownerView": {
59 59
      "type": "object",
60 60
      "required": [
61 61
        "did",
62 62
        "live",
63 63
        "deleted",
64 64
        "takenDown",
65 -
        "firstSeenAt",
66 -
        "lastCreatedAt",
67 65
        "quota",
68 66
        "maxLifetimeDays"
69 67
      ],
70 68
      "properties": {
71 69
        "did": {
72 70
          "type": "string",
73 71
          "format": "did"
74 72
        },
75 73
        "live": {
76 74
          "type": "integer",
77 75
          "description": "Accounts they hold right now."
78 76
        },
79 77
        "quota": {
80 78
          "type": "integer",
81 79
          "description": "Live accounts they may hold at once, after any override. Zero means they may create nothing further."
82 80
        },
83 81
        "handle": {
84 82
          "type": "string",
85 83
          "format": "handle",
86 84
          "description": "The holder's own handle, resolved from their DID document. Not a handle they minted here. Absent when their identity could not be resolved, in which case the DID is the name."
87 85
        },
88 86
        "limits": {
89 87
          "ref": "#limitsView",
90 88
          "type": "ref",
91 -
          "description": "The override itself. Absent when the configured defaults apply untouched."
89 +
          "description": "The override itself. Absent when the configured defaults apply untouched, which is the common case: a record exists for everyone who has used this server, not only for exceptions."
92 90
        },
93 91
        "deleted": {
94 92
          "type": "integer",
95 93
          "description": "Accounts of theirs that are gone, however they went."
96 94
        },
97 95
        "takenDown": {
98 96
          "type": "integer",
99 97
          "description": "Accounts of theirs the PDS currently considers taken down."
100 98
        },
99 +
        "lastSeenAt": {
100 +
          "type": "string",
101 +
          "format": "datetime",
102 +
          "description": "Their last authenticated request. Absent for anyone last seen before this was recorded."
103 +
        },
101 104
        "firstSeenAt": {
102 105
          "type": "string",
103 -
          "format": "datetime"
106 +
          "format": "datetime",
107 +
          "description": "Earliest of their first account and their first authenticated request. Absent when neither is known."
104 108
        },
105 109
        "lastCreatedAt": {
106 110
          "type": "string",
107 -
          "format": "datetime"
111 +
          "format": "datetime",
112 +
          "description": "When they last created an account. Absent when they hold none and never have."
108 113
        },
109 114
        "maxLifetimeDays": {
110 115
          "type": "integer",
111 116
          "description": "How far an account of theirs may be extended, after any override."
112 117
        }
113 118
      },
114 119
      "description": "Someone who holds or has held accounts on this server, as an operator sees them."
115 120
    },
116 121
    "limitsView": {
117 122
      "type": "object",
118 123
      "required": [
119 124
        "createdAt",
120 125
        "updatedAt"
121 126
      ],
122 127
      "properties": {
123 128
        "note": {
124 129
          "type": "string",
125 130
          "maxLength": 500,
126 131
          "description": "Why, in the operator's own words."
127 132
        },
128 133
        "createdAt": {
129 134
          "type": "string",
130 135
          "format": "datetime"
131 136
        },
132 137
        "updatedAt": {
133 138
          "type": "string",
134 139
          "format": "datetime"
135 140
        },
136 141
        "updatedBy": {
137 142
          "type": "string",
138 143
          "format": "did"
139 144
        },
140 145
        "quotaOverride": {
141 146
          "type": "integer",
142 147
          "description": "Live accounts they may hold. Absent means the configured default."
143 148
        },
144 149
        "lifetimeDaysOverride": {
145 150
          "type": "integer",
146 151
          "description": "Maximum lifetime in days. Absent means the configured default."
147 152
        }
148 153
      },
149 154
      "description": "An operator's exception to the configured limits for one person."
150 155
    },
151 156
    "accountView": {
152 157
      "type": "object",
153 158
      "required": [
154 159
        "did",
155 160
        "handle",
156 161
        "didMethod",
157 162
        "origin",
158 163
        "createdAt"
159 164
      ],
160 165
      "properties": {
161 166
        "did": {
162 167
          "type": "string",
163 168
          "format": "did"
164 169
        },
165 170
        "handle": {
166 171
          "type": "string",
167 172
          "format": "handle"
168 173
        },
169 174
        "origin": {
170 175
          "type": "string",
171 176
          "description": "Whether this server minted the identity or it arrived by migration.",
172 177
          "knownValues": [
173 178
            "minted",
174 179
            "imported"
175 180
          ]
176 181
        },
177 182
        "status": {
178 183
          "type": "string"
179 184
        },
180 185
        "ownerDid": {
181 186
          "type": "string",
182 187
          "format": "did",
183 188
          "description": "Who asked for this account. Absent for anything created before the invite gate."
184 189
        },
185 190
        "createdAt": {
186 191
          "type": "string",
187 192
          "format": "datetime"
188 193
        },
189 194
        "deletedAt": {
190 195
          "type": "string",
191 196
          "format": "datetime"
192 197
        },
193 198
        "didMethod": {
194 199
          "type": "string",
195 200
          "knownValues": [
196 201
            "plc",
197 202
            "web"
198 203
          ]
199 204
        },
200 205
        "expiresAt": {
201 206
          "type": "string",
202 207
          "format": "datetime",
203 208
          "description": "Absent when the account never expires."
204 209
        },
205 210
        "protected": {
206 211
          "type": "boolean"
207 212
        },
208 213
        "retiredAt": {
209 214
          "type": "string",
210 215
          "format": "datetime",
211 216
          "description": "When the identity was tombstoned or unpublished."
212 217
        },
213 218
        "extensions": {
214 219
          "type": "integer"
215 220
        },
216 221
        "handleDomain": {
217 222
          "type": "string"
218 223
        }
219 224
      },
220 225
      "description": "An account as an operator sees it, which is an accountView plus who holds it."
221 226
    }
222 227
  },
223 228
  "$type": "com.atproto.lexicon.schema",
224 229
  "lexicon": 1
225 230
}

Compare Other Versions

Lexicon Garden

@