app.didpic.notification.updateSeen
Schema Diff
+19 -3
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 6 non-breaking changes.
Breaking Changes (1)
- ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.notification.updateSeen:output.badge", sort: "minimum", value: "0" }
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "app.didpic.notification.updateSeen:input.token" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.notification.updateSeen:output" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.notification.updateSeen:output.badge" }
- AddedEdge AddedEdge { src: "app.didpic.notification.updateSeen", tgt: "app.didpic.notification.updateSeen:output", kind: "prop", name: Some("output") }
- AddedEdge AddedEdge { src: "app.didpic.notification.updateSeen:input", tgt: "app.didpic.notification.updateSeen:input.token", kind: "prop", name: Some("token") }
- AddedEdge AddedEdge { src: "app.didpic.notification.updateSeen:output", tgt: "app.didpic.notification.updateSeen:output.badge", kind: "prop", name: Some("badge") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.didpic.notification.updateSeen:input.token" }AddedVertex { vertex_id: "app.didpic.notification.updateSeen:output" }AddedVertex { vertex_id: "app.didpic.notification.updateSeen:output.badge" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.notification.updateSeen:output.badge", sort: "minimum", value: "0" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.didpic.notification.updateSeen", tgt: "app.didpic.notification.updateSeen:output", kind: "prop", name: Some("output") }
- Non-breaking: AddedEdge { src: "app.didpic.notification.updateSeen:input", tgt: "app.didpic.notification.updateSeen:input.token", kind: "prop", name: Some("token") }
- Non-breaking: AddedEdge { src: "app.didpic.notification.updateSeen:output", tgt: "app.didpic.notification.updateSeen:output.badge", kind: "prop", name: Some("badge") }
1
1
{
2
2
"id": "app.didpic.notification.updateSeen",
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
"seenAt"
11
11
],
12
12
"properties": {
13
+
"token": {
14
+
"type": "string",
15
+
"description": "Caller's push token. When supplied and bound to the viewer, the response carries the post-update device badge."
16
+
},
13
17
"seenAt": {
14
18
"type": "string",
15
-
"format": "datetime",
16
-
"description": "Timestamp indicating everything indexed at or before this moment has been seen. Clients should echo back the serverTime returned by listNotifications rather than using a locally-computed `now`."
19
+
"format": "datetime"
20
+
}
21
+
}
22
+
},
23
+
"encoding": "application/json"
24
+
},
25
+
"output": {
26
+
"schema": {
27
+
"type": "object",
28
+
"properties": {
29
+
"badge": {
30
+
"type": "integer",
31
+
"minimum": 0,
32
+
"description": "Device-wide unread sum across every DID bound to the supplied token."
17
33
}
18
34
}
19
35
},
20
36
"encoding": "application/json"
21
37
},
22
-
"description": "Push the authenticated viewer's notification seenAt boundary forward. Server-enforced monotonic: a stale or out-of-order client call with an older seenAt is a no-op, not a regression."
38
+
"description": "Mark notifications as seen up to seenAt."
23
39
}
24
40
},
25
41
"$type": "com.atproto.lexicon.schema",
26
42
"lexicon": 1
27
43
}