space.highport.manage.reserveDomain
Schema Diff
+1 -1
Compatibility Analysis
Backward Compatible
No changes detected.
1
1
{
2
2
"id": "space.highport.manage.reserveDomain",
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
"hostname",
11
11
"subject"
12
12
],
13
13
"properties": {
14
14
"subject": {
15
15
"type": "string",
16
16
"format": "did",
17
17
"description": "The identity the name is reserved for. Without genesisOp it is checked for syntax only: it need not resolve, and its DID document need not name the hostname yet."
18
18
},
19
19
"hostname": {
20
20
"type": "string",
21
21
"maxLength": 253,
22
22
"description": "A name exactly one label under a delegation-enabled base the caller owns."
23
23
},
24
24
"genesisOp": {
25
25
"type": "unknown",
26
26
"description": "Optional proof for a did:plc subject: its signed genesis operation, as submitted to a PLC directory. Verified offline, without resolving anything. The call is refused with InvalidSubject unless the operation is a genesis operation (prev is null) that hashes to the subject, is signed by one of its own rotation keys, and lists at://<hostname> in alsoKnownAs. A subject that is not a did:plc cannot carry one."
27
27
}
28
28
}
29
29
},
30
30
"encoding": "application/json"
31
31
},
32
32
"errors": [
33
33
{
34
34
"name": "InvalidDomain",
35
35
"description": "Not a syntactically valid, non-reserved domain."
36
36
},
37
37
{
38
38
"name": "DomainDenied",
39
39
"description": "The hostname or the subject is on the operator denylist."
40
40
},
41
41
{
42
42
"name": "NotBaseOwner",
43
43
"description": "The name is not under a delegation-enabled base whose verified or active registration belongs to the caller."
44
44
},
45
45
{
46
46
"name": "DomainTaken",
47
-
"description": "A proven registration of this name exists, including one the base owner made the ordinary way, a live reservation for a different subject, or a suspended one; release it first."
47
+
"description": "The name is held and cannot be reserved: a proven registration of it exists, including one the base owner made the ordinary way, a live reservation for a different subject, or a suspended one; an unproven claim on it is itself a base carrying a delegation or a certificate grant; or it is released but still carries a delegation or a grant, such as one whose wildcard is still being retired. Release it, or wait for the retirement, first."
48
48
},
49
49
{
50
50
"name": "DelegationNotVerified",
51
51
"description": "The base's wildcard has not been shown to route to this service: its delegation probe has not passed yet, or the base's routing has lapsed. The message names the probe hostname and the *.<base> record to publish or restore. The name being reserved is never resolved."
52
52
},
53
53
{
54
54
"name": "InvalidSubject",
55
55
"description": "The subject is not a well-formed did:plc or did:web, or is a did:web rooted at the hostname being reserved, or a genesisOp was given that does not prove the subject. The message says which rule failed."
56
56
},
57
57
{
58
58
"name": "DelegatedNameTooDeep",
59
59
"description": "The name is more than one label under the base. A wildcard covers exactly one label, so a deeper name could never complete a handshake."
60
60
},
61
61
{
62
62
"name": "DelegationQuotaExceeded",
63
63
"description": "The base already holds its maxNames reservations. Never returned for a name the subject already holds."
64
64
}
65
65
],
66
66
"output": {
67
67
"schema": {
68
68
"type": "object",
69
69
"required": [
70
70
"hostname",
71
71
"status",
72
72
"subject"
73
73
],
74
74
"properties": {
75
75
"status": {
76
76
"ref": "space.highport.defs#domainStatus",
77
77
"type": "ref"
78
78
},
79
79
"subject": {
80
80
"type": "string",
81
81
"format": "did"
82
82
},
83
83
"hostname": {
84
84
"type": "string"
85
85
}
86
86
}
87
87
},
88
88
"encoding": "application/json"
89
89
},
90
90
"description": "Reserve a name directly under a delegation-enabled base for another identity. The name answers /.well-known/atproto-did with the subject before the subject has published anything, and the subject may then publish a site there. The caller must be the base's registered identity. An unproven claim on the name, held by any identity, is replaced. Reserving a name again for the subject that already holds it is answered with the reservation as it stands, writes nothing, and does not count against maxNames, so a retry is safe. A reservation has no expiry: it is held for as long as the base is."
91
91
}
92
92
},
93
93
"$type": "com.atproto.lexicon.schema",
94
94
"lexicon": 1
95
95
}