space.highport.defs
Schema Diff
+65 -1
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 21 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.highport.defs#delegationView", src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.certMode", kind: "prop", name: Some("certMode") }
- ConstraintTightened ConstraintTightened { vertex_id: "space.highport.defs#verificationCheck.name", sort: "knownValues", old_value: "[\"ownership\",\"traffic\",\"conflict\"]", new_value: "[\"ownership\",\"traffic\",\"conflict\",\"certificate\"]" }
Non-Breaking Changes (21)
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationState" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.certMode" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.challengeTarget" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.grantedAt" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.maxNames" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.probeHostname" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.state" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.wildcardObservedAt" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#domainView.delegatedBase" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#domainView.delegation" }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.challengeTarget", kind: "prop", name: Some("challengeTarget") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.grantedAt", kind: "prop", name: Some("grantedAt") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.maxNames", kind: "prop", name: Some("maxNames") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.probeHostname", kind: "prop", name: Some("probeHostname") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.state", kind: "prop", name: Some("state") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.wildcardObservedAt", kind: "prop", name: Some("wildcardObservedAt") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView.state", tgt: "space.highport.defs#delegationState", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "space.highport.defs#domainView", tgt: "space.highport.defs#domainView.delegatedBase", kind: "prop", name: Some("delegatedBase") }
- AddedEdge AddedEdge { src: "space.highport.defs#domainView", tgt: "space.highport.defs#domainView.delegation", kind: "prop", name: Some("delegation") }
- AddedEdge AddedEdge { src: "space.highport.defs#domainView.delegation", tgt: "space.highport.defs#delegationView", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "space.highport.defs#delegationState" }AddedVertex { vertex_id: "space.highport.defs#delegationView" }AddedVertex { vertex_id: "space.highport.defs#delegationView.certMode" }AddedVertex { vertex_id: "space.highport.defs#delegationView.challengeTarget" }AddedVertex { vertex_id: "space.highport.defs#delegationView.grantedAt" }AddedVertex { vertex_id: "space.highport.defs#delegationView.maxNames" }AddedVertex { vertex_id: "space.highport.defs#delegationView.probeHostname" }AddedVertex { vertex_id: "space.highport.defs#delegationView.state" }AddedVertex { vertex_id: "space.highport.defs#delegationView.wildcardObservedAt" }AddedVertex { vertex_id: "space.highport.defs#domainView.delegatedBase" }AddedVertex { vertex_id: "space.highport.defs#domainView.delegation" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "space.highport.defs#verificationCheck.name", sort: "knownValues", old_value: "[\"ownership\",\"traffic\",\"conflict\"]", new_value: "[\"ownership\",\"traffic\",\"conflict\",\"certificate\"]" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "space.highport.defs#delegationView", src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.certMode", kind: "prop", name: Some("certMode") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.challengeTarget", kind: "prop", name: Some("challengeTarget") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.grantedAt", kind: "prop", name: Some("grantedAt") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.maxNames", kind: "prop", name: Some("maxNames") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.probeHostname", kind: "prop", name: Some("probeHostname") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.state", kind: "prop", name: Some("state") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.wildcardObservedAt", kind: "prop", name: Some("wildcardObservedAt") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView.state", tgt: "space.highport.defs#delegationState", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "space.highport.defs#domainView", tgt: "space.highport.defs#domainView.delegatedBase", kind: "prop", name: Some("delegatedBase") }
- Non-breaking: AddedEdge { src: "space.highport.defs#domainView", tgt: "space.highport.defs#domainView.delegation", kind: "prop", name: Some("delegation") }
- Non-breaking: AddedEdge { src: "space.highport.defs#domainView.delegation", tgt: "space.highport.defs#delegationView", kind: "ref", name: None }
1
1
{
2
2
"id": "space.highport.defs",
3
3
"defs": {
4
4
"jobView": {
5
5
"type": "object",
6
6
"required": [
7
7
"id",
8
8
"uri",
9
9
"action",
10
10
"state",
11
11
"attempts",
12
12
"scheduledAt"
13
13
],
14
14
"properties": {
15
15
"id": {
16
16
"type": "integer"
17
17
},
18
18
"uri": {
19
19
"type": "string"
20
20
},
21
21
"state": {
22
22
"type": "string"
23
23
},
24
24
"action": {
25
25
"type": "string"
26
26
},
27
27
"attempts": {
28
28
"type": "integer"
29
29
},
30
30
"lastError": {
31
31
"type": "string"
32
32
},
33
33
"startedAt": {
34
34
"type": "string",
35
35
"format": "datetime"
36
36
},
37
37
"finishedAt": {
38
38
"type": "string",
39
39
"format": "datetime"
40
40
},
41
41
"scheduledAt": {
42
42
"type": "string",
43
43
"format": "datetime"
44
44
}
45
45
}
46
46
},
47
47
"tlsView": {
48
48
"type": "object",
49
49
"required": [
50
50
"status"
51
51
],
52
52
"properties": {
53
53
"status": {
54
54
"ref": "#tlsStatus",
55
55
"type": "ref"
56
56
},
57
57
"issuedAt": {
58
58
"type": "string",
59
59
"format": "datetime"
60
60
},
61
61
"expiresAt": {
62
62
"type": "string",
63
63
"format": "datetime"
64
64
},
65
65
"lastError": {
66
66
"type": "string"
67
67
}
68
68
}
69
69
},
70
70
"siteView": {
71
71
"type": "object",
72
72
"required": [
73
73
"domain",
74
74
"did",
75
75
"uri",
76
76
"cid",
77
77
"rev",
78
78
"activatedAt",
79
79
"sourceKind"
80
80
],
81
81
"properties": {
82
82
"cid": {
83
83
"type": "string",
84
84
"format": "cid"
85
85
},
86
86
"did": {
87
87
"type": "string",
88
88
"format": "did"
89
89
},
90
90
"rev": {
91
91
"type": "string"
92
92
},
93
93
"uri": {
94
94
"type": "string",
95
95
"format": "at-uri"
96
96
},
97
97
"tile": {
98
98
"ref": "#tileView",
99
99
"type": "ref"
100
100
},
101
101
"space": {
102
102
"type": "string",
103
103
"format": "at-uri",
104
104
"description": "Present for a site published from a space; attribution survives the plane."
105
105
},
106
106
"domain": {
107
107
"type": "string"
108
108
},
109
109
"sourceKind": {
110
110
"type": "string",
111
111
"knownValues": [
112
112
"inline",
113
113
"tile"
114
114
]
115
115
},
116
116
"activatedAt": {
117
117
"type": "string",
118
118
"format": "datetime"
119
119
}
120
120
}
121
121
},
122
122
"tileView": {
123
123
"type": "object",
124
124
"required": [
125
125
"uri",
126
126
"cid",
127
127
"did",
128
128
"name",
129
129
"state",
130
130
"indexedAt"
131
131
],
132
132
"properties": {
133
133
"cid": {
134
134
"type": "string",
135
135
"format": "cid"
136
136
},
137
137
"did": {
138
138
"type": "string",
139
139
"format": "did"
140
140
},
141
141
"uri": {
142
142
"type": "string",
143
143
"format": "at-uri"
144
144
},
145
145
"name": {
146
146
"type": "string"
147
147
},
148
148
"space": {
149
149
"type": "string",
150
150
"format": "at-uri",
151
151
"description": "Present for a space tile; never on the public surface."
152
152
},
153
153
"state": {
154
154
"type": "string",
155
155
"knownValues": [
156
156
"indexing",
157
157
"ready",
158
158
"incomplete",
159
159
"rejected",
160
160
"suspended",
161
161
"deleted"
162
162
]
163
163
},
164
164
"handle": {
165
165
"type": "string",
166
166
"format": "handle",
167
167
"description": "The author's handle, present only when it resolves back to did. Absent is normal and not an error: a handle that has just changed, or one whose DNS is unreachable, is reported as absent rather than as a claim, and clients show did instead."
168
168
},
169
169
"params": {
170
170
"type": "array",
171
171
"items": {
172
172
"ref": "space.highport.sites.tile#param",
173
173
"type": "ref"
174
174
}
175
175
},
176
176
"iconUrl": {
177
177
"type": "string",
178
178
"format": "uri",
179
179
"description": "https://highport.space/xrpc/space.highport.sites.getTileIcon?cid={cid}; absent if the tile has no icon."
180
180
},
181
181
"indexedAt": {
182
182
"type": "string",
183
183
"format": "datetime"
184
184
},
185
185
"latestCid": {
186
186
"type": "string",
187
187
"format": "cid",
188
188
"description": "The newest indexed version at this URI, when it differs from cid."
189
189
},
190
190
"entryCount": {
191
191
"type": "integer"
192
192
},
193
193
"totalBytes": {
194
194
"type": "integer"
195
195
},
196
196
"description": {
197
197
"type": "string"
198
198
}
199
199
}
200
200
},
201
201
"spaceView": {
202
202
"type": "object",
203
203
"required": [
204
204
"uri",
205
205
"authority",
206
206
"skey",
207
207
"syncState",
208
208
"connectedAt"
209
209
],
210
210
"properties": {
211
211
"uri": {
212
212
"type": "string",
213
213
"format": "at-uri"
214
214
},
215
215
"skey": {
216
216
"type": "string"
217
217
},
218
218
"policy": {
219
219
"type": "string",
220
220
"knownValues": [
221
221
"public",
222
222
"member-list",
223
223
"managing-app",
224
224
"unknown"
225
225
]
226
226
},
227
227
"headRev": {
228
228
"type": "string"
229
229
},
230
230
"appAccess": {
231
231
"type": "string",
232
232
"knownValues": [
233
233
"open",
234
234
"allow-list",
235
235
"unknown"
236
236
]
237
237
},
238
238
"authority": {
239
239
"type": "string",
240
240
"format": "did"
241
241
},
242
242
"syncState": {
243
243
"ref": "#spaceSyncState",
244
244
"type": "ref"
245
245
},
246
246
"tileCount": {
247
247
"type": "integer"
248
248
},
249
249
"connectedAt": {
250
250
"type": "string",
251
251
"format": "datetime"
252
252
},
253
253
"domainCount": {
254
254
"type": "integer"
255
255
},
256
256
"lastCheckedAt": {
257
257
"type": "string",
258
258
"format": "datetime"
259
259
},
260
260
"lastNotifiedAt": {
261
261
"type": "string",
262
262
"format": "datetime"
263
263
},
264
264
"accessExpiresAt": {
265
265
"type": "string",
266
266
"format": "datetime",
267
267
"description": "When bard's current space credential expires; absent when bard holds none."
268
268
},
269
269
"accessGrantedBy": {
270
270
"type": "string",
271
271
"format": "did"
272
272
},
273
273
"queuedNotifications": {
274
274
"type": "integer",
275
275
"description": "Receipts waiting for a credential."
276
276
},
277
277
"registrationExpiresAt": {
278
278
"type": "string",
279
279
"format": "datetime"
280
280
}
281
281
}
282
282
},
283
283
"tlsStatus": {
284
284
"type": "string",
285
285
"knownValues": [
286
286
"none",
287
287
"pending",
288
288
"issued",
289
289
"renewing",
290
290
"failed"
291
291
]
292
292
},
293
293
"domainView": {
294
294
"type": "object",
295
295
"required": [
296
296
"domain",
297
297
"did",
298
298
"status",
299
299
"createdAt"
300
300
],
301
301
"properties": {
302
302
"did": {
303
303
"type": "string",
304
304
"format": "did"
305
305
},
306
306
"tls": {
307
307
"ref": "#tlsStatus",
308
308
"type": "ref"
309
309
},
310
310
"space": {
311
311
"type": "string",
312
312
"format": "at-uri",
313
313
"description": "The space the domain is registered to; absent for a DID-registered domain. The serving record is the space authority's."
314
314
},
315
315
"domain": {
316
316
"type": "string"
317
317
},
318
318
"status": {
319
319
"ref": "#domainStatus",
320
320
"type": "ref"
321
321
},
322
322
"tileCid": {
323
323
"type": "string",
324
324
"format": "cid"
325
325
},
326
326
"tileUri": {
327
327
"type": "string",
328
328
"format": "at-uri"
329
329
},
330
330
"activeCid": {
331
331
"type": "string",
332
332
"format": "cid"
333
333
},
334
334
"activeRev": {
335
335
"type": "string"
336
336
},
337
337
"activeUri": {
338
338
"type": "string",
339
339
"format": "at-uri"
340
340
},
341
341
"createdAt": {
342
342
"type": "string",
343
343
"format": "datetime"
344
344
},
345
+
"delegation": {
346
+
"ref": "#delegationView",
347
+
"type": "ref",
348
+
"description": "On a base: what its owner has enabled and granted. Absent on a domain that is not a base."
349
+
},
345
350
"entryCount": {
346
351
"type": "integer"
347
352
},
348
353
"pendingCid": {
349
354
"type": "string",
350
355
"format": "cid",
351
356
"description": "A validated, prepared record awaiting its commit, if any."
352
357
},
353
358
"sourceKind": {
354
359
"type": "string",
355
360
"knownValues": [
356
361
"inline",
357
362
"tile"
358
363
]
359
364
},
360
365
"totalBytes": {
361
366
"type": "integer"
362
367
},
363
368
"verifiedAt": {
364
369
"type": "string",
365
370
"format": "datetime"
366
371
},
367
372
"activatedAt": {
368
373
"type": "string",
369
374
"format": "datetime"
370
375
},
371
376
"pendingState": {
372
377
"type": "string",
373
378
"knownValues": [
374
379
"preparing",
375
380
"pending-publication"
376
381
]
382
+
},
383
+
"delegatedBase": {
384
+
"type": "string",
385
+
"description": "On a name reserved under a delegation base: the base whose owner granted it. did is then the identity the name was reserved for, not the base's owner."
377
386
}
378
387
}
379
388
},
380
389
"indexState": {
381
390
"type": "string",
382
391
"knownValues": [
383
392
"preparing",
384
393
"pending-publication",
385
394
"expired",
386
395
"queued",
387
396
"fetching",
388
397
"materializing",
389
398
"active",
390
399
"superseded",
391
400
"rejected",
392
401
"failed"
393
402
]
394
403
},
395
404
"spaceEvent": {
396
405
"type": "object",
397
406
"required": [
398
407
"seq",
399
408
"space",
400
409
"kind",
401
410
"at"
402
411
],
403
412
"properties": {
404
413
"at": {
405
414
"type": "string",
406
415
"format": "datetime"
407
416
},
408
417
"cid": {
409
418
"type": "string",
410
419
"format": "cid"
411
420
},
412
421
"seq": {
413
422
"type": "integer"
414
423
},
415
424
"kind": {
416
425
"type": "string",
417
426
"knownValues": [
418
427
"record.created",
419
428
"record.updated",
420
429
"record.deleted",
421
430
"site.activated",
422
431
"site.deactivated",
423
432
"tile.ready",
424
433
"tile.incomplete",
425
434
"tile.deleted",
426
435
"access.granted",
427
436
"access.expired",
428
437
"registration.renewed",
429
438
"registration.lapsed",
430
439
"app-not-allowed",
431
440
"space.deleted"
432
441
]
433
442
},
434
443
"actor": {
435
444
"type": "string",
436
445
"format": "did"
437
446
},
438
447
"space": {
439
448
"type": "string",
440
449
"format": "at-uri"
441
450
},
442
451
"subject": {
443
452
"type": "string"
444
453
}
445
454
}
446
455
},
447
456
"blobFailure": {
448
457
"type": "object",
449
458
"required": [
450
459
"cid",
451
460
"role",
452
461
"sourceDid",
453
462
"error"
454
463
],
455
464
"properties": {
456
465
"cid": {
457
466
"type": "string",
458
467
"format": "cid"
459
468
},
460
469
"role": {
461
470
"type": "string",
462
471
"knownValues": [
463
472
"manifest",
464
473
"tile",
465
474
"parameter",
466
475
"notFound"
467
476
]
468
477
},
469
478
"error": {
470
479
"type": "string",
471
480
"description": "BlobUnavailable, CidMismatch, FetchFailed."
472
481
},
473
482
"sourceDid": {
474
483
"type": "string",
475
484
"format": "did"
476
485
}
477
486
}
478
487
},
479
488
"domainEvent": {
480
489
"type": "object",
481
490
"required": [
482
491
"event",
483
492
"createdAt"
484
493
],
485
494
"properties": {
486
495
"actor": {
487
496
"type": "string"
488
497
},
489
498
"event": {
490
499
"type": "string"
491
500
},
492
501
"detail": {
493
502
"type": "unknown"
494
503
},
495
504
"createdAt": {
496
505
"type": "string",
497
506
"format": "datetime"
498
507
}
499
508
}
500
509
},
501
510
"missingBlob": {
502
511
"type": "object",
503
512
"required": [
504
513
"cid",
505
514
"role",
506
515
"sourceDid"
507
516
],
508
517
"properties": {
509
518
"cid": {
510
519
"type": "string",
511
520
"format": "cid"
512
521
},
513
522
"role": {
514
523
"type": "string",
515
524
"knownValues": [
516
525
"manifest",
517
526
"tile",
518
527
"parameter",
519
528
"notFound"
520
529
]
521
530
},
522
531
"sourceDid": {
523
532
"type": "string",
524
533
"format": "did"
525
534
}
526
535
}
527
536
},
528
537
"domainStatus": {
529
538
"type": "string",
530
539
"knownValues": [
531
540
"pending",
532
541
"verifying",
533
542
"verified",
534
543
"active",
535
544
"failed",
536
545
"suspended",
537
546
"released"
538
547
]
539
548
},
540
549
"denylistEntry": {
541
550
"type": "object",
542
551
"required": [
543
552
"subject",
544
553
"kind",
545
554
"createdAt"
546
555
],
547
556
"properties": {
548
557
"kind": {
549
558
"type": "string",
550
559
"knownValues": [
551
560
"domain",
552
561
"did",
553
562
"uri",
554
563
"cid",
555
564
"pattern",
556
565
"space"
557
566
]
558
567
},
559
568
"actor": {
560
569
"type": "string"
561
570
},
562
571
"reason": {
563
572
"type": "string"
564
573
},
565
574
"subject": {
566
575
"type": "string"
567
576
},
568
577
"createdAt": {
569
578
"type": "string",
570
579
"format": "datetime"
571
580
}
572
581
}
573
582
},
583
+
"delegationView": {
584
+
"type": "object",
585
+
"required": [
586
+
"certMode"
587
+
],
588
+
"properties": {
589
+
"state": {
590
+
"ref": "#delegationState",
591
+
"type": "ref",
592
+
"description": "Absent on a base that has not enabled delegation."
593
+
},
594
+
"certMode": {
595
+
"type": "string",
596
+
"description": "How names under the base obtain certificates. Every base starts per-name.",
597
+
"knownValues": [
598
+
"per-name",
599
+
"wildcard"
600
+
]
601
+
},
602
+
"maxNames": {
603
+
"type": "integer",
604
+
"description": "The most names the base may hold in reservation."
605
+
},
606
+
"grantedAt": {
607
+
"type": "string",
608
+
"format": "datetime",
609
+
"description": "When the live wildcard grant was made."
610
+
},
611
+
"probeHostname": {
612
+
"type": "string",
613
+
"maxLength": 253,
614
+
"description": "The random name under the base through which the wildcard is proven to route."
615
+
},
616
+
"challengeTarget": {
617
+
"type": "string",
618
+
"description": "The name the base's _acme-challenge CNAME must point at, exactly as the certificate issuer writes to it. Present only while a wildcard grant is live."
619
+
},
620
+
"wildcardObservedAt": {
621
+
"type": "string",
622
+
"format": "datetime",
623
+
"description": "When the base's wildcard certificate was first seen in certificate storage."
624
+
}
625
+
},
626
+
"description": "What a base's owner has enabled and granted. Each field but certMode is absent where the base has no such fact."
627
+
},
574
628
"dnsInstruction": {
575
629
"type": "object",
576
630
"required": [
577
631
"type",
578
632
"name",
579
633
"value"
580
634
],
581
635
"properties": {
582
636
"ttl": {
583
637
"type": "integer"
584
638
},
585
639
"name": {
586
640
"type": "string",
587
641
"description": "Fully-qualified record name."
588
642
},
589
643
"type": {
590
644
"type": "string",
591
645
"knownValues": [
592
646
"TXT",
593
647
"CNAME",
594
648
"ALIAS",
595
649
"ANAME",
596
650
"A",
597
651
"AAAA"
598
652
]
599
653
},
600
654
"value": {
601
655
"type": "string"
602
656
},
603
657
"purpose": {
604
658
"type": "string",
605
659
"knownValues": [
606
660
"ownership",
607
661
"certificate",
608
662
"traffic"
609
663
]
610
664
},
611
665
"required": {
612
666
"type": "boolean"
613
667
}
614
668
}
615
669
},
616
670
"malwareFinding": {
617
671
"type": "object",
618
672
"required": [
619
673
"id",
620
674
"cid",
621
675
"signature",
622
676
"class",
623
677
"source",
624
678
"foundAt"
625
679
],
626
680
"properties": {
627
681
"id": {
628
682
"type": "integer",
629
683
"description": "The finding's row id, which the denylist entry's reason names."
630
684
},
631
685
"cid": {
632
686
"type": "string",
633
687
"description": "The content address. `-` for a detection at upload, where nothing was stored."
634
688
},
635
689
"did": {
636
690
"type": "string",
637
691
"format": "did",
638
692
"description": "The repository the bytes were fetched from โ for a tile resource the tile's author, not the site owner. Absent for content bard authored."
639
693
},
640
694
"uri": {
641
695
"type": "string",
642
696
"format": "at-uri",
643
697
"description": "The record that referenced it."
644
698
},
645
699
"path": {
646
700
"type": "string",
647
701
"description": "The manifest key the bytes were mapped at โ the field that answers which file. Absent where there is no key: the notFound resource, an upload refused before any record referenced it, and a rescan, which starts from a CID."
648
702
},
649
703
"class": {
650
704
"type": "string",
651
705
"description": "`unwanted` is a PUA match and stops short of the publishing identity under the default policy.",
652
706
"knownValues": [
653
707
"malware",
654
708
"unwanted"
655
709
]
656
710
},
657
711
"domain": {
658
712
"type": "string",
659
713
"description": "The hostname it would have served at."
660
714
},
661
715
"source": {
662
716
"type": "string",
663
717
"description": "Where it was found. `rescan` means the content was clean when it arrived and a signature has caught up with it; `admin` means an operator asked about this CID rather than the sweep reaching it.",
664
718
"knownValues": [
665
719
"fetch",
666
720
"upload",
667
721
"rescan",
668
722
"admin"
669
723
]
670
724
},
671
725
"foundAt": {
672
726
"type": "string",
673
727
"format": "datetime"
674
728
},
675
729
"signature": {
676
730
"type": "string",
677
731
"description": "The signature name, verbatim from the engine."
678
732
},
679
733
"quarantinedAt": {
680
734
"type": "string",
681
735
"format": "datetime",
682
736
"description": "When the response finished. Absent means it has not: the content is denied and may still be served."
683
737
}
684
738
},
685
739
"description": "One malware detection. Written before anything is denied or deleted, because the quarantine destroys the sample and nothing after that can re-derive why."
686
740
},
687
741
"spaceSyncState": {
688
742
"type": "string",
689
743
"knownValues": [
690
744
"connecting",
691
745
"syncing",
692
746
"synced",
693
747
"credential-expired",
694
748
"registration-lapsed",
695
749
"app-not-allowed",
696
750
"authority-unreachable",
697
751
"deleted",
698
752
"disconnected"
699
753
]
700
754
},
755
+
"delegationState": {
756
+
"type": "string",
757
+
"description": "Where a base's delegation stands. probing means the wildcard has not yet been proven to route; enabled means it has; routing-lapsed means a proven wildcard stopped routing past its grace, and the names under the base are suspended until it routes again.",
758
+
"knownValues": [
759
+
"probing",
760
+
"enabled",
761
+
"routing-lapsed"
762
+
]
763
+
},
701
764
"edgeReachStatus": {
702
765
"type": "string",
703
766
"description": "Whether bard's edge routes a serving hostname to this deployment. unknown means no probe has been made and must never be read as a fault; routed means the probe reached this deployment's bard-origin; foreign means something else answered for the hostname; unreachable means nothing answered at all; other-deployment means a bard origin belonging to a different deployment answered; unproven means the answer looked like this deployment's but could not answer the reachability challenge, so something may be imitating it.",
704
767
"knownValues": [
705
768
"unknown",
706
769
"routed",
707
770
"foreign",
708
771
"unreachable",
709
772
"other-deployment",
710
773
"unproven"
711
774
]
712
775
},
713
776
"validationError": {
714
777
"type": "object",
715
778
"required": [
716
779
"name",
717
780
"message"
718
781
],
719
782
"properties": {
720
783
"name": {
721
784
"type": "string",
722
785
"description": "A DESIGN.md ยง3.8 error name, e.g. DuplicatePath, RedirectTargetNotFound, ParameterTypeMismatch."
723
786
},
724
787
"path": {
725
788
"type": "string",
726
789
"description": "JSON Pointer into the record, when the error concerns one field or entry."
727
790
},
728
791
"message": {
729
792
"type": "string"
730
793
}
731
794
}
732
795
},
733
796
"edgeReachability": {
734
797
"type": "object",
735
798
"required": [
736
799
"status",
737
800
"domain"
738
801
],
739
802
"properties": {
740
803
"detail": {
741
804
"type": "string",
742
805
"description": "What answered, for a person: a status line, or a transport error. Diagnostic only; nothing branches on it."
743
806
},
744
807
"domain": {
745
808
"type": "string",
746
809
"maxLength": 253,
747
810
"description": "The hostname that was probed, so a reader is told which name is not arriving."
748
811
},
749
812
"status": {
750
813
"ref": "#edgeReachStatus",
751
814
"type": "ref"
752
815
},
753
816
"checkedAt": {
754
817
"type": "string",
755
818
"format": "datetime",
756
819
"description": "When the probe was made. Absent when status is unknown."
757
820
}
758
821
},
759
822
"description": "What the deployment's own edge answered for a hostname, measured over the network rather than read from edge configuration. A site can be indexed and activated while the edge has nowhere to send its hostname, and this is the only field that says so."
760
823
},
761
824
"verificationView": {
762
825
"type": "object",
763
826
"required": [
764
827
"status",
765
828
"checks"
766
829
],
767
830
"properties": {
768
831
"checks": {
769
832
"type": "array",
770
833
"items": {
771
834
"ref": "#verificationCheck",
772
835
"type": "ref"
773
836
}
774
837
},
775
838
"status": {
776
839
"ref": "#domainStatus",
777
840
"type": "ref"
778
841
},
779
842
"lastCheckedAt": {
780
843
"type": "string",
781
844
"format": "datetime"
782
845
}
783
846
}
784
847
},
785
848
"preparationStatus": {
786
849
"type": "object",
787
850
"required": [
788
851
"state",
789
852
"cid",
790
853
"fetched",
791
854
"pending",
792
855
"failed"
793
856
],
794
857
"properties": {
795
858
"cid": {
796
859
"type": "string",
797
860
"format": "cid"
798
861
},
799
862
"state": {
800
863
"type": "string",
801
864
"knownValues": [
802
865
"preparing",
803
866
"pending-publication",
804
867
"expired"
805
868
]
806
869
},
807
870
"failed": {
808
871
"type": "array",
809
872
"items": {
810
873
"ref": "#blobFailure",
811
874
"type": "ref"
812
875
}
813
876
},
814
877
"fetched": {
815
878
"type": "integer"
816
879
},
817
880
"pending": {
818
881
"type": "integer"
819
882
},
820
883
"expiresAt": {
821
884
"type": "string",
822
885
"format": "datetime"
823
886
}
824
887
}
825
888
},
826
889
"verificationCheck": {
827
890
"type": "object",
828
891
"required": [
829
892
"name",
830
893
"passed",
831
894
"checkedAt"
832
895
],
833
896
"properties": {
834
897
"name": {
835
898
"type": "string",
836
899
"knownValues": [
837
900
"ownership",
838
901
"traffic",
839
-
"conflict"
902
+
"conflict",
903
+
"certificate"
840
904
]
841
905
},
842
906
"detail": {
843
907
"type": "string"
844
908
},
845
909
"passed": {
846
910
"type": "boolean"
847
911
},
848
912
"checkedAt": {
849
913
"type": "string",
850
914
"format": "datetime"
851
915
}
852
916
}
853
917
}
854
918
},
855
919
"$type": "com.atproto.lexicon.schema",
856
920
"lexicon": 1
857
921
}