at.happyproto.server.addDomain
Schema Diff
+12 -0
Compatibility Analysis
Backward Compatible
No changes detected.
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"altRecord": {
5
5
"properties": {
6
6
"type": {
7
7
"description": "A.",
8
8
"type": "string"
9
9
},
10
10
"value": {
11
11
"description": "The instance host's public IPv4.",
12
12
"type": "string"
13
13
}
14
14
},
15
15
"required": [
16
16
"type",
17
17
"value"
18
18
],
19
19
"type": "object"
20
20
},
21
21
"checks": {
22
22
"properties": {
23
23
"checkedAt": {
24
24
"description": "When the check ran.",
25
25
"type": "string"
26
26
},
27
27
"ownership": {
28
28
"description": "Whether the TXT record carries this claim's token.",
29
29
"knownValues": [
30
30
"ok",
31
31
"missing",
32
32
"error"
33
33
],
34
34
"type": "string"
35
35
},
36
36
"pointing": {
37
37
"description": "Whether the hostname resolves to the instance's host. Absent when the check didn't get that far, such as when the TXT record was missing.",
38
38
"knownValues": [
39
39
"ok",
40
40
"elsewhere",
41
41
"error"
42
42
],
43
43
"type": "string"
44
44
}
45
45
},
46
46
"required": [
47
47
"ownership",
48
48
"checkedAt"
49
49
],
50
50
"type": "object"
51
51
},
52
52
"domain": {
53
53
"description": "A custom domain on one of the caller's instances.",
54
54
"properties": {
55
55
"checks": {
56
56
"description": "The latest DNS check. Absent until the first check has run.",
57
57
"ref": "#checks",
58
58
"type": "ref"
59
59
},
60
60
"createdAt": {
61
61
"description": "When the domain was added.",
62
62
"type": "string"
63
63
},
64
64
"expiresAt": {
65
65
"description": "When a pending claim expires if it is never verified. Absent once verified.",
66
66
"type": "string"
67
67
},
68
68
"hostname": {
69
69
"description": "The hostname, lowercase, internationalized names in punycode.",
70
70
"type": "string"
71
71
},
72
72
"id": {
73
73
"description": "The domain's UUID.",
74
74
"type": "string"
75
75
},
76
76
"lapsesAt": {
77
77
"description": "When HappyProto stops serving the domain if its TXT record stays missing. Absent while the record is present.",
78
78
"type": "string"
79
79
},
80
80
"primary": {
81
81
"description": "Whether this is the instance's primary domain, the one its PUBLIC_URL follows.",
82
82
"type": "boolean"
83
83
},
84
84
"records": {
85
85
"description": "The DNS records the customer publishes: the TXT that proves ownership, then the CNAME that points the hostname at the instance.",
86
86
"items": {
87
87
"ref": "#record",
88
88
"type": "ref"
89
89
},
90
90
"type": "array"
91
91
},
92
92
"serving": {
93
93
"description": "Whether the domain actually works: off until it is verified, issuing while its certificate is ordered, live once it serves over HTTPS.",
94
94
"knownValues": [
95
95
"routing",
96
96
"issuing",
97
97
"live",
98
98
"failed",
99
99
"off"
100
100
],
101
101
"type": "string"
102
102
},
103
103
"state": {
104
104
"description": "pending: waiting for the DNS records. verified: proven and served. lapsed: the TXT record went missing, and HappyProto stopped serving it; it recovers if the record comes back before expiresAt.",
105
105
"knownValues": [
106
106
"pending",
107
107
"verified",
108
108
"lapsed"
109
109
],
110
110
"type": "string"
111
111
},
112
112
"verifiedAt": {
113
113
"description": "When the domain was first verified.",
114
114
"type": "string"
115
115
}
116
116
},
117
117
"required": [
118
118
"id",
119
119
"hostname",
120
120
"state",
121
121
"primary",
122
122
"records",
123
123
"serving",
124
124
"createdAt"
125
125
],
126
126
"type": "object"
127
127
},
128
128
"main": {
129
129
"description": "Add a custom domain to one of the caller's instances. It starts pending, with the DNS records to publish. Customers only.",
130
130
"errors": [
131
131
{
132
132
"description": "This endpoint requires an authenticated caller.",
133
133
"name": "AuthRequired"
134
134
},
135
135
{
136
136
"description": "The caller is not a HappyProto customer, or the provisioner refused them.",
137
137
"name": "Forbidden"
138
138
},
139
139
{
140
140
"description": "instanceId or idempotencyKey is not a UUID, or hostname is missing or too long.",
141
141
"name": "InvalidRequest"
142
142
},
143
143
{
144
144
"description": "No such instance or domain, or it is not the caller's. The cases are indistinguishable.",
145
145
"name": "NotFound"
146
146
},
147
147
{
148
148
"description": "Custom domains are not switched on yet.",
149
149
"name": "NotAvailable"
150
150
},
151
151
{
152
152
"description": "Passed through from the provisioner.",
153
153
"name": "InvalidSlug"
154
154
},
155
155
{
156
156
"description": "Passed through from the provisioner.",
157
157
"name": "SlugTaken"
158
158
},
159
159
{
160
160
"description": "Passed through from the provisioner.",
161
161
"name": "NotEntitled"
162
162
},
163
163
{
164
164
"description": "Passed through from the provisioner.",
165
165
"name": "InstanceLimit"
166
166
},
167
167
{
168
168
"description": "Passed through from the provisioner.",
169
169
"name": "NoCapacity"
170
170
},
171
171
{
172
172
"description": "Passed through from the provisioner: the instance is already changing, or a request with this idempotencyKey is still running.",
173
173
"name": "OperationInProgress"
174
174
},
175
175
{
176
176
"description": "The hostname is not a valid public hostname: no scheme, port, path, wildcard or IP address.",
177
177
"name": "InvalidHostname"
178
178
},
179
179
{
180
180
"description": "The hostname is HappyProto's own, or under one of its domains.",
181
181
"name": "PlatformHostname"
182
182
},
183
183
{
184
184
"description": "The instance already has this hostname.",
185
185
"name": "DomainExists"
186
186
},
187
187
{
188
188
"description": "The instance already has as many custom domains as it may.",
189
189
"name": "DomainLimit"
190
190
},
191
191
{
192
192
"description": "Passed through from the provisioner.",
193
193
"name": "TooSoon"
194
194
},
195
195
{
196
196
"description": "Passed through from the provisioner.",
197
197
"name": "DomainIsPrimary"
198
198
},
199
199
{
200
+
"description": "Passed through from the provisioner.",
201
+
"name": "NotVerified"
202
+
},
203
+
{
204
+
"description": "Passed through from the provisioner.",
205
+
"name": "CertificateNotReady"
206
+
},
207
+
{
208
+
"description": "Passed through from the provisioner.",
209
+
"name": "VersionTooOld"
210
+
},
211
+
{
200
212
"description": "The provisioner is unreachable, not configured, or answered with an error it does not explain to callers, or the job could not be started.",
201
213
"name": "Upstream"
202
214
}
203
215
],
204
216
"input": {
205
217
"encoding": "application/json",
206
218
"schema": {
207
219
"properties": {
208
220
"hostname": {
209
221
"description": "The hostname, such as app.example.com. No scheme, port or path.",
210
222
"type": "string"
211
223
},
212
224
"idempotencyKey": {
213
225
"description": "A UUID the client generates once per intended change and resends on every retry of it, so a retry gets the original reply instead of acting twice.",
214
226
"type": "string"
215
227
},
216
228
"instanceId": {
217
229
"description": "The instance's UUID.",
218
230
"type": "string"
219
231
}
220
232
},
221
233
"required": [
222
234
"instanceId",
223
235
"hostname",
224
236
"idempotencyKey"
225
237
],
226
238
"type": "object"
227
239
}
228
240
},
229
241
"output": {
230
242
"encoding": "application/json",
231
243
"schema": {
232
244
"properties": {
233
245
"domain": {
234
246
"ref": "#domain",
235
247
"type": "ref"
236
248
}
237
249
},
238
250
"required": [
239
251
"domain"
240
252
],
241
253
"type": "object"
242
254
}
243
255
},
244
256
"type": "procedure"
245
257
},
246
258
"record": {
247
259
"properties": {
248
260
"alt": {
249
261
"description": "For an apex name, which cannot hold a CNAME: the A record to publish instead. Absent when the instance's host has no public IPv4.",
250
262
"ref": "#altRecord",
251
263
"type": "ref"
252
264
},
253
265
"name": {
254
266
"description": "The record's name.",
255
267
"type": "string"
256
268
},
257
269
"type": {
258
270
"description": "TXT or CNAME.",
259
271
"type": "string"
260
272
},
261
273
"value": {
262
274
"description": "The record's value.",
263
275
"type": "string"
264
276
}
265
277
},
266
278
"required": [
267
279
"type",
268
280
"name",
269
281
"value"
270
282
],
271
283
"type": "object"
272
284
}
273
285
},
274
286
"id": "at.happyproto.server.addDomain",
275
287
"lexicon": 1
276
288
}