zone.stratos.sync.subscribeRecords
Schema Diff
+45 -5
Compatibility Analysis
Breaking Changes Detected
3 breaking changes, 10 non-breaking changes.
Breaking Changes (3)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment", src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.action", kind: "prop", name: Some("action") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment", src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.did", kind: "prop", name: Some("did") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment", src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.time", kind: "prop", name: Some("time") }
Non-Breaking Changes (10)
- AddedVertex AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment" }
- AddedVertex AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.action" }
- AddedVertex AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.boundaries" }
- AddedVertex AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.boundaries:items" }
- AddedVertex AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.did" }
- AddedVertex AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.service" }
- AddedVertex AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.time" }
- AddedEdge AddedEdge { src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.boundaries", kind: "prop", name: Some("boundaries") }
- AddedEdge AddedEdge { src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.service", kind: "prop", name: Some("service") }
- AddedEdge AddedEdge { src: "zone.stratos.sync.subscribeRecords#enrollment.boundaries", tgt: "zone.stratos.sync.subscribeRecords#enrollment.boundaries:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment" }AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.action" }AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.boundaries" }AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.boundaries:items" }AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.did" }AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.service" }AddedVertex { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment.time" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment", src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.action", kind: "prop", name: Some("action") }
- Breaking: RequiredEdgeAdded { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment", src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.did", kind: "prop", name: Some("did") }
- Breaking: RequiredEdgeAdded { vertex_id: "zone.stratos.sync.subscribeRecords#enrollment", src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.time", kind: "prop", name: Some("time") }
- Non-breaking: AddedEdge { src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.boundaries", kind: "prop", name: Some("boundaries") }
- Non-breaking: AddedEdge { src: "zone.stratos.sync.subscribeRecords#enrollment", tgt: "zone.stratos.sync.subscribeRecords#enrollment.service", kind: "prop", name: Some("service") }
- Non-breaking: AddedEdge { src: "zone.stratos.sync.subscribeRecords#enrollment.boundaries", tgt: "zone.stratos.sync.subscribeRecords#enrollment.boundaries:items", kind: "items", name: None }
1
1
{
2
2
"id": "zone.stratos.sync.subscribeRecords",
3
3
"defs": {
4
4
"info": {
5
5
"type": "object",
6
6
"required": [
7
7
"name"
8
8
],
9
9
"properties": {
10
10
"name": {
11
11
"type": "string",
12
12
"maxLength": 128,
13
13
"description": "The type of info message.",
14
14
"knownValues": [
15
15
"OutdatedCursor"
16
16
]
17
17
},
18
18
"message": {
19
19
"type": "string",
20
20
"maxLength": 1024,
21
21
"description": "Additional details about the info message."
22
22
}
23
23
},
24
24
"description": "An informational message about the subscription state."
25
25
},
26
26
"main": {
27
27
"type": "subscription",
28
28
"errors": [
29
29
{
30
30
"name": "FutureCursor",
31
31
"description": "Cursor is in the future."
32
32
},
33
33
{
34
34
"name": "AuthRequired",
35
35
"description": "Authentication is required."
36
36
}
37
37
],
38
38
"message": {
39
39
"schema": {
40
40
"refs": [
41
41
"#commit",
42
+
"#enrollment",
42
43
"#info"
43
44
],
44
45
"type": "union"
45
46
}
46
47
},
47
48
"parameters": {
48
49
"type": "params",
49
-
"required": [
50
-
"did"
51
-
],
52
50
"properties": {
53
51
"did": {
54
52
"type": "string",
55
53
"format": "did",
56
-
"description": "The DID of the account to subscribe to."
54
+
"description": "The DID of the account to subscribe to. If omitted, subscribes to service-level enrollment events."
57
55
},
58
56
"cursor": {
59
57
"type": "integer",
60
58
"description": "The last known event sequence number to resume from."
61
59
},
62
60
"domain": {
63
61
"type": "string",
64
62
"maxLength": 253,
65
63
"description": "Optional domain filter. Only events for records with this domain in their boundary will be emitted."
66
64
}
67
65
}
68
66
},
69
-
"description": "Subscribe to stratos record updates for a specific account. Requires service auth or owner authentication."
67
+
"description": "Subscribe to stratos events. When 'did' is provided, subscribes to record updates for that account. When omitted, subscribes to service-level events (enrollments). Callers must authenticate with a signed service JWT via the Authorization: Bearer header."
70
68
},
71
69
"commit": {
72
70
"type": "object",
73
71
"required": [
74
72
"seq",
75
73
"did",
76
74
"time",
77
75
"rev",
78
76
"ops"
79
77
],
80
78
"properties": {
81
79
"did": {
82
80
"type": "string",
83
81
"format": "did",
84
82
"description": "The DID of the account."
85
83
},
86
84
"ops": {
87
85
"type": "array",
88
86
"items": {
89
87
"ref": "#recordOp",
90
88
"type": "ref"
91
89
},
92
90
"description": "List of record operations in this commit."
93
91
},
94
92
"rev": {
95
93
"type": "string",
96
94
"format": "tid",
97
95
"description": "The repo revision."
98
96
},
99
97
"seq": {
100
98
"type": "integer",
101
99
"description": "The sequence number of this event."
102
100
},
103
101
"time": {
104
102
"type": "string",
105
103
"format": "datetime",
106
104
"description": "Timestamp of when the event was sequenced."
107
105
}
108
106
},
109
107
"description": "A commit event containing record operations."
110
108
},
111
109
"recordOp": {
112
110
"type": "object",
113
111
"required": [
114
112
"action",
115
113
"path"
116
114
],
117
115
"properties": {
118
116
"cid": {
119
117
"type": "cid-link",
120
118
"description": "The CID of the record. Present for create and update operations."
121
119
},
122
120
"path": {
123
121
"type": "string",
124
122
"maxLength": 512,
125
123
"description": "The record path (collection/rkey)."
126
124
},
127
125
"action": {
128
126
"type": "string",
129
127
"maxLength": 32,
130
128
"description": "The type of operation.",
131
129
"knownValues": [
132
130
"create",
133
131
"update",
134
132
"delete"
135
133
]
136
134
},
137
135
"record": {
138
136
"type": "unknown",
139
137
"description": "The record content. Present for create and update operations."
140
138
}
141
139
},
142
140
"description": "A single record operation within a commit."
141
+
},
142
+
"enrollment": {
143
+
"type": "object",
144
+
"required": [
145
+
"did",
146
+
"action",
147
+
"time"
148
+
],
149
+
"properties": {
150
+
"did": {
151
+
"type": "string",
152
+
"format": "did",
153
+
"description": "The DID of the user."
154
+
},
155
+
"time": {
156
+
"type": "string",
157
+
"format": "datetime",
158
+
"description": "Timestamp of the enrollment event."
159
+
},
160
+
"action": {
161
+
"type": "string",
162
+
"maxLength": 32,
163
+
"description": "The enrollment action.",
164
+
"knownValues": [
165
+
"enroll",
166
+
"unenroll"
167
+
]
168
+
},
169
+
"service": {
170
+
"type": "string",
171
+
"format": "uri",
172
+
"description": "The Stratos service endpoint URL."
173
+
},
174
+
"boundaries": {
175
+
"type": "array",
176
+
"items": {
177
+
"type": "string"
178
+
},
179
+
"description": "The boundaries assigned to the user."
180
+
}
181
+
},
182
+
"description": "An enrollment event indicating a user has enrolled or unenrolled from the service."
143
183
}
144
184
},
145
185
"$type": "com.atproto.lexicon.schema",
146
186
"lexicon": 1
147
187
}