rip.pds.admin.defs
Schema Diff
+10 -5
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
}