@app-vitals/agent-admin 1.12.0 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -253,7 +253,7 @@
253
253
  "type": "string"
254
254
  },
255
255
  "example": [
256
- "vitals-os",
256
+ "example-marketplace",
257
257
  "shipwright"
258
258
  ]
259
259
  },
@@ -3102,7 +3102,7 @@
3102
3102
  "type": "string"
3103
3103
  },
3104
3104
  "example": [
3105
- "vitals-os"
3105
+ "example-marketplace"
3106
3106
  ]
3107
3107
  }
3108
3108
  },
@@ -3122,7 +3122,7 @@
3122
3122
  },
3123
3123
  "maxItems": 100,
3124
3124
  "example": [
3125
- "vitals-os",
3125
+ "example-marketplace",
3126
3126
  "shipwright"
3127
3127
  ]
3128
3128
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@app-vitals/agent-admin",
3
- "version": "1.12.0",
3
+ "version": "1.13.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/app-vitals/agent.git",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@anthropic-ai/sdk": "0.135.0",
45
- "@app-vitals/agent-lib": "1.12.0",
45
+ "@app-vitals/agent-lib": "1.13.0",
46
46
  "@hono/zod-openapi": "^1.0.0",
47
47
  "@prisma/adapter-pg": "^7.10.0",
48
48
  "@prisma/client": "^7.10.0",
@@ -0,0 +1,21 @@
1
+ /**
2
+ * admin/src/admin-spec.unit.test.ts
3
+ *
4
+ * Guards the generated platform OpenAPI spec against strings that Shipwright's
5
+ * check-banned-strings rejects (it fails the Platform Release Bump). Example
6
+ * values must use neutral names, e.g. "example-marketplace".
7
+ */
8
+
9
+ import { describe, expect, it } from "bun:test";
10
+ import { buildPlatformAdminSpec } from "./admin-spec.ts";
11
+
12
+ const BANNED_PATTERNS = [/vitals-os/i];
13
+
14
+ describe("buildPlatformAdminSpec", () => {
15
+ it("contains none of Shipwright's banned patterns", () => {
16
+ const spec = JSON.stringify(buildPlatformAdminSpec());
17
+ for (const pattern of BANNED_PATTERNS) {
18
+ expect(spec).not.toMatch(pattern);
19
+ }
20
+ });
21
+ });
package/src/agents-api.ts CHANGED
@@ -466,7 +466,7 @@ const GetAgentResultSchema = z
466
466
  bakedMarketplaces: z
467
467
  .array(z.string())
468
468
  .optional()
469
- .openapi({ example: ["vitals-os", "shipwright"] }),
469
+ .openapi({ example: ["example-marketplace", "shipwright"] }),
470
470
  /** APM-1.3: the six real agent-policy fields (APM-1.1 DB columns). */
471
471
  autoPostReviews: z.boolean().openapi({ example: true }),
472
472
  allowSelfReview: z.boolean().openapi({ example: false }),
@@ -0,0 +1,610 @@
1
+ {
2
+ "enterprise_installation_success": {
3
+ "status": 200,
4
+ "body": {
5
+ "id": 4242,
6
+ "client_id": "Iv1.targetapp0001",
7
+ "account": {
8
+ "login": "acme-enterprise",
9
+ "id": 99,
10
+ "type": "Enterprise"
11
+ },
12
+ "repository_selection": "all",
13
+ "access_tokens_url": "https://api.github.com/app/installations/4242/access_tokens",
14
+ "repositories_url": "https://api.github.com/installation/repositories",
15
+ "html_url": "https://github.com/organizations/acme-enterprise/settings/installations/4242",
16
+ "app_id": 12345,
17
+ "app_slug": "shipwright-installer",
18
+ "target_id": 42420,
19
+ "target_type": "Enterprise",
20
+ "permissions": {
21
+ "contents": "write",
22
+ "metadata": "read"
23
+ },
24
+ "events": [],
25
+ "created_at": "2026-10-01T00:00:00Z",
26
+ "updated_at": "2026-10-01T00:00:00Z",
27
+ "single_file_name": null,
28
+ "suspended_at": null,
29
+ "suspended_by": null
30
+ }
31
+ },
32
+ "enterprise_installation_403": {
33
+ "status": 403,
34
+ "body": {
35
+ "message": "Resource not accessible by integration",
36
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
37
+ }
38
+ },
39
+ "enterprise_installation_403_secondary_rate_limit": {
40
+ "status": 403,
41
+ "headers": {
42
+ "retry-after": "60"
43
+ },
44
+ "body": {
45
+ "message": "You have exceeded a secondary rate limit. Please wait a few minutes before you try again.",
46
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api#about-secondary-rate-limits"
47
+ }
48
+ },
49
+ "enterprise_installation_404": {
50
+ "status": 404,
51
+ "body": {
52
+ "message": "Not Found",
53
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
54
+ }
55
+ },
56
+ "enterprise_installation_422": {
57
+ "status": 422,
58
+ "body": {
59
+ "message": "Validation Failed",
60
+ "errors": [
61
+ {
62
+ "resource": "Installation",
63
+ "code": "invalid",
64
+ "field": "client_id"
65
+ }
66
+ ],
67
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
68
+ }
69
+ },
70
+ "enterprise_installation_429": {
71
+ "status": 429,
72
+ "headers": {
73
+ "retry-after": "30",
74
+ "x-ratelimit-remaining": "0"
75
+ },
76
+ "body": {
77
+ "message": "API rate limit exceeded",
78
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api"
79
+ }
80
+ },
81
+ "enterprise_installation_500": {
82
+ "status": 500,
83
+ "body": {
84
+ "message": "Server Error"
85
+ }
86
+ },
87
+ "enterprise_installation_503": {
88
+ "status": 503,
89
+ "body": {
90
+ "message": "Service Unavailable"
91
+ }
92
+ },
93
+ "access_token_success": {
94
+ "status": 201,
95
+ "body": {
96
+ "token": "ghs_cassetteInstallationToken0000000000",
97
+ "expires_at": "2026-11-09T13:00:00Z",
98
+ "permissions": {
99
+ "enterprise_organization_installations": "write",
100
+ "metadata": "read"
101
+ },
102
+ "repository_selection": "all"
103
+ }
104
+ },
105
+ "access_token_403": {
106
+ "status": 403,
107
+ "body": {
108
+ "message": "Resource not accessible by integration",
109
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
110
+ }
111
+ },
112
+ "access_token_403_secondary_rate_limit": {
113
+ "status": 403,
114
+ "headers": {
115
+ "retry-after": "60"
116
+ },
117
+ "body": {
118
+ "message": "You have exceeded a secondary rate limit. Please wait a few minutes before you try again.",
119
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api#about-secondary-rate-limits"
120
+ }
121
+ },
122
+ "access_token_404": {
123
+ "status": 404,
124
+ "body": {
125
+ "message": "Not Found",
126
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
127
+ }
128
+ },
129
+ "access_token_422": {
130
+ "status": 422,
131
+ "body": {
132
+ "message": "Validation Failed",
133
+ "errors": [
134
+ {
135
+ "resource": "Installation",
136
+ "code": "invalid",
137
+ "field": "client_id"
138
+ }
139
+ ],
140
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
141
+ }
142
+ },
143
+ "access_token_429": {
144
+ "status": 429,
145
+ "headers": {
146
+ "retry-after": "30",
147
+ "x-ratelimit-remaining": "0"
148
+ },
149
+ "body": {
150
+ "message": "API rate limit exceeded",
151
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api"
152
+ }
153
+ },
154
+ "access_token_500": {
155
+ "status": 500,
156
+ "body": {
157
+ "message": "Server Error"
158
+ }
159
+ },
160
+ "access_token_503": {
161
+ "status": 503,
162
+ "body": {
163
+ "message": "Service Unavailable"
164
+ }
165
+ },
166
+ "installable_orgs_success": {
167
+ "status": 200,
168
+ "body": [
169
+ {
170
+ "id": 1,
171
+ "login": "org-1"
172
+ },
173
+ {
174
+ "id": 2,
175
+ "login": "org-2"
176
+ }
177
+ ]
178
+ },
179
+ "installable_orgs_page_1": {
180
+ "status": 200,
181
+ "headers": {
182
+ "link": "<https://api.github.com/enterprises/acme/apps/installable_organizations?per_page=100&page=2>; rel=\"next\", <https://api.github.com/enterprises/acme/apps/installable_organizations?per_page=100&page=2>; rel=\"last\""
183
+ },
184
+ "body": [
185
+ {
186
+ "id": 1,
187
+ "login": "org-1"
188
+ },
189
+ {
190
+ "id": 2,
191
+ "login": "org-2"
192
+ }
193
+ ]
194
+ },
195
+ "installable_orgs_page_2": {
196
+ "status": 200,
197
+ "headers": {
198
+ "link": "<https://api.github.com/enterprises/acme/apps/installable_organizations?per_page=100&page=1>; rel=\"prev\", <https://api.github.com/enterprises/acme/apps/installable_organizations?per_page=100&page=1>; rel=\"first\""
199
+ },
200
+ "body": [
201
+ {
202
+ "id": 3,
203
+ "login": "org-3"
204
+ }
205
+ ]
206
+ },
207
+ "installable_orgs_empty": {
208
+ "status": 200,
209
+ "body": []
210
+ },
211
+ "installable_orgs_403": {
212
+ "status": 403,
213
+ "body": {
214
+ "message": "Resource not accessible by integration",
215
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
216
+ }
217
+ },
218
+ "installable_orgs_403_secondary_rate_limit": {
219
+ "status": 403,
220
+ "headers": {
221
+ "retry-after": "60"
222
+ },
223
+ "body": {
224
+ "message": "You have exceeded a secondary rate limit. Please wait a few minutes before you try again.",
225
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api#about-secondary-rate-limits"
226
+ }
227
+ },
228
+ "installable_orgs_404": {
229
+ "status": 404,
230
+ "body": {
231
+ "message": "Not Found",
232
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
233
+ }
234
+ },
235
+ "installable_orgs_422": {
236
+ "status": 422,
237
+ "body": {
238
+ "message": "Validation Failed",
239
+ "errors": [
240
+ {
241
+ "resource": "Installation",
242
+ "code": "invalid",
243
+ "field": "client_id"
244
+ }
245
+ ],
246
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
247
+ }
248
+ },
249
+ "installable_orgs_429": {
250
+ "status": 429,
251
+ "headers": {
252
+ "retry-after": "30",
253
+ "x-ratelimit-remaining": "0"
254
+ },
255
+ "body": {
256
+ "message": "API rate limit exceeded",
257
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api"
258
+ }
259
+ },
260
+ "installable_orgs_500": {
261
+ "status": 500,
262
+ "body": {
263
+ "message": "Server Error"
264
+ }
265
+ },
266
+ "installable_orgs_503": {
267
+ "status": 503,
268
+ "body": {
269
+ "message": "Service Unavailable"
270
+ }
271
+ },
272
+ "org_installations_success": {
273
+ "status": 200,
274
+ "body": [
275
+ {
276
+ "id": 501,
277
+ "client_id": "Iv1.targetapp0001",
278
+ "account": {
279
+ "login": "acme-eng",
280
+ "id": 5010,
281
+ "type": "Organization"
282
+ },
283
+ "repository_selection": "all",
284
+ "access_tokens_url": "https://api.github.com/app/installations/501/access_tokens",
285
+ "repositories_url": "https://api.github.com/installation/repositories",
286
+ "html_url": "https://github.com/organizations/acme-eng/settings/installations/501",
287
+ "app_id": 777,
288
+ "app_slug": "target-app",
289
+ "target_id": 5010,
290
+ "target_type": "Organization",
291
+ "permissions": {
292
+ "contents": "write",
293
+ "metadata": "read"
294
+ },
295
+ "events": [],
296
+ "created_at": "2026-10-01T00:00:00Z",
297
+ "updated_at": "2026-10-01T00:00:00Z",
298
+ "single_file_name": null,
299
+ "suspended_at": null,
300
+ "suspended_by": null
301
+ },
302
+ {
303
+ "id": 502,
304
+ "client_id": "Iv1.targetapp0001",
305
+ "account": {
306
+ "login": "acme-eng",
307
+ "id": 5020,
308
+ "type": "Organization"
309
+ },
310
+ "repository_selection": "selected",
311
+ "access_tokens_url": "https://api.github.com/app/installations/502/access_tokens",
312
+ "repositories_url": "https://api.github.com/installation/repositories",
313
+ "html_url": "https://github.com/organizations/acme-eng/settings/installations/502",
314
+ "app_id": 777,
315
+ "app_slug": "target-app",
316
+ "target_id": 5020,
317
+ "target_type": "Organization",
318
+ "permissions": {
319
+ "contents": "write",
320
+ "metadata": "read"
321
+ },
322
+ "events": [],
323
+ "created_at": "2026-10-01T00:00:00Z",
324
+ "updated_at": "2026-10-01T00:00:00Z",
325
+ "single_file_name": null,
326
+ "suspended_at": null,
327
+ "suspended_by": null
328
+ }
329
+ ]
330
+ },
331
+ "org_installations_page_1": {
332
+ "status": 200,
333
+ "headers": {
334
+ "link": "<https://api.github.com/enterprises/acme/apps/organizations/acme-eng/installations?per_page=100&page=2>; rel=\"next\""
335
+ },
336
+ "body": [
337
+ {
338
+ "id": 501,
339
+ "client_id": "Iv1.targetapp0001",
340
+ "account": {
341
+ "login": "acme-eng",
342
+ "id": 5010,
343
+ "type": "Organization"
344
+ },
345
+ "repository_selection": "all",
346
+ "access_tokens_url": "https://api.github.com/app/installations/501/access_tokens",
347
+ "repositories_url": "https://api.github.com/installation/repositories",
348
+ "html_url": "https://github.com/organizations/acme-eng/settings/installations/501",
349
+ "app_id": 777,
350
+ "app_slug": "target-app",
351
+ "target_id": 5010,
352
+ "target_type": "Organization",
353
+ "permissions": {
354
+ "contents": "write",
355
+ "metadata": "read"
356
+ },
357
+ "events": [],
358
+ "created_at": "2026-10-01T00:00:00Z",
359
+ "updated_at": "2026-10-01T00:00:00Z",
360
+ "single_file_name": null,
361
+ "suspended_at": null,
362
+ "suspended_by": null
363
+ }
364
+ ]
365
+ },
366
+ "org_installations_page_2": {
367
+ "status": 200,
368
+ "body": [
369
+ {
370
+ "id": 502,
371
+ "client_id": "Iv1.targetapp0001",
372
+ "account": {
373
+ "login": "acme-eng",
374
+ "id": 5020,
375
+ "type": "Organization"
376
+ },
377
+ "repository_selection": "selected",
378
+ "access_tokens_url": "https://api.github.com/app/installations/502/access_tokens",
379
+ "repositories_url": "https://api.github.com/installation/repositories",
380
+ "html_url": "https://github.com/organizations/acme-eng/settings/installations/502",
381
+ "app_id": 777,
382
+ "app_slug": "target-app",
383
+ "target_id": 5020,
384
+ "target_type": "Organization",
385
+ "permissions": {
386
+ "contents": "write",
387
+ "metadata": "read"
388
+ },
389
+ "events": [],
390
+ "created_at": "2026-10-01T00:00:00Z",
391
+ "updated_at": "2026-10-01T00:00:00Z",
392
+ "single_file_name": null,
393
+ "suspended_at": null,
394
+ "suspended_by": null
395
+ }
396
+ ]
397
+ },
398
+ "org_installations_403": {
399
+ "status": 403,
400
+ "body": {
401
+ "message": "Resource not accessible by integration",
402
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
403
+ }
404
+ },
405
+ "org_installations_403_secondary_rate_limit": {
406
+ "status": 403,
407
+ "headers": {
408
+ "retry-after": "60"
409
+ },
410
+ "body": {
411
+ "message": "You have exceeded a secondary rate limit. Please wait a few minutes before you try again.",
412
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api#about-secondary-rate-limits"
413
+ }
414
+ },
415
+ "org_installations_404": {
416
+ "status": 404,
417
+ "body": {
418
+ "message": "Not Found",
419
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
420
+ }
421
+ },
422
+ "org_installations_422": {
423
+ "status": 422,
424
+ "body": {
425
+ "message": "Validation Failed",
426
+ "errors": [
427
+ {
428
+ "resource": "Installation",
429
+ "code": "invalid",
430
+ "field": "client_id"
431
+ }
432
+ ],
433
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
434
+ }
435
+ },
436
+ "org_installations_429": {
437
+ "status": 429,
438
+ "headers": {
439
+ "retry-after": "30",
440
+ "x-ratelimit-remaining": "0"
441
+ },
442
+ "body": {
443
+ "message": "API rate limit exceeded",
444
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api"
445
+ }
446
+ },
447
+ "org_installations_500": {
448
+ "status": 500,
449
+ "body": {
450
+ "message": "Server Error"
451
+ }
452
+ },
453
+ "org_installations_503": {
454
+ "status": 503,
455
+ "body": {
456
+ "message": "Service Unavailable"
457
+ }
458
+ },
459
+ "install_created": {
460
+ "status": 201,
461
+ "body": {
462
+ "id": 601,
463
+ "client_id": "Iv1.targetapp0001",
464
+ "account": {
465
+ "login": "acme-eng",
466
+ "id": 6010,
467
+ "type": "Organization"
468
+ },
469
+ "repository_selection": "all",
470
+ "access_tokens_url": "https://api.github.com/app/installations/601/access_tokens",
471
+ "repositories_url": "https://api.github.com/installation/repositories",
472
+ "html_url": "https://github.com/organizations/acme-eng/settings/installations/601",
473
+ "app_id": 777,
474
+ "app_slug": "target-app",
475
+ "target_id": 6010,
476
+ "target_type": "Organization",
477
+ "permissions": {
478
+ "contents": "write",
479
+ "metadata": "read"
480
+ },
481
+ "events": [],
482
+ "created_at": "2026-10-01T00:00:00Z",
483
+ "updated_at": "2026-10-01T00:00:00Z",
484
+ "single_file_name": null,
485
+ "suspended_at": null,
486
+ "suspended_by": null
487
+ }
488
+ },
489
+ "install_already_installed": {
490
+ "status": 200,
491
+ "body": {
492
+ "id": 601,
493
+ "client_id": "Iv1.targetapp0001",
494
+ "account": {
495
+ "login": "acme-eng",
496
+ "id": 6010,
497
+ "type": "Organization"
498
+ },
499
+ "repository_selection": "all",
500
+ "access_tokens_url": "https://api.github.com/app/installations/601/access_tokens",
501
+ "repositories_url": "https://api.github.com/installation/repositories",
502
+ "html_url": "https://github.com/organizations/acme-eng/settings/installations/601",
503
+ "app_id": 777,
504
+ "app_slug": "target-app",
505
+ "target_id": 6010,
506
+ "target_type": "Organization",
507
+ "permissions": {
508
+ "contents": "write",
509
+ "metadata": "read"
510
+ },
511
+ "events": [],
512
+ "created_at": "2026-10-01T00:00:00Z",
513
+ "updated_at": "2026-10-01T00:00:00Z",
514
+ "single_file_name": null,
515
+ "suspended_at": null,
516
+ "suspended_by": null
517
+ }
518
+ },
519
+ "install_selected_created": {
520
+ "status": 201,
521
+ "body": {
522
+ "id": 602,
523
+ "client_id": "Iv1.targetapp0001",
524
+ "account": {
525
+ "login": "acme-eng",
526
+ "id": 6020,
527
+ "type": "Organization"
528
+ },
529
+ "repository_selection": "selected",
530
+ "access_tokens_url": "https://api.github.com/app/installations/602/access_tokens",
531
+ "repositories_url": "https://api.github.com/installation/repositories",
532
+ "html_url": "https://github.com/organizations/acme-eng/settings/installations/602",
533
+ "app_id": 777,
534
+ "app_slug": "target-app",
535
+ "target_id": 6020,
536
+ "target_type": "Organization",
537
+ "permissions": {
538
+ "contents": "write",
539
+ "metadata": "read"
540
+ },
541
+ "events": [],
542
+ "created_at": "2026-10-01T00:00:00Z",
543
+ "updated_at": "2026-10-01T00:00:00Z",
544
+ "single_file_name": null,
545
+ "suspended_at": null,
546
+ "suspended_by": null
547
+ }
548
+ },
549
+ "install_403": {
550
+ "status": 403,
551
+ "body": {
552
+ "message": "Resource not accessible by integration",
553
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
554
+ }
555
+ },
556
+ "install_403_secondary_rate_limit": {
557
+ "status": 403,
558
+ "headers": {
559
+ "retry-after": "60"
560
+ },
561
+ "body": {
562
+ "message": "You have exceeded a secondary rate limit. Please wait a few minutes before you try again.",
563
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api#about-secondary-rate-limits"
564
+ }
565
+ },
566
+ "install_404": {
567
+ "status": 404,
568
+ "body": {
569
+ "message": "Not Found",
570
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
571
+ }
572
+ },
573
+ "install_422": {
574
+ "status": 422,
575
+ "body": {
576
+ "message": "Validation Failed",
577
+ "errors": [
578
+ {
579
+ "resource": "Installation",
580
+ "code": "invalid",
581
+ "field": "client_id"
582
+ }
583
+ ],
584
+ "documentation_url": "https://docs.github.com/enterprise-cloud@latest/rest/enterprise-admin/organization-installations"
585
+ }
586
+ },
587
+ "install_429": {
588
+ "status": 429,
589
+ "headers": {
590
+ "retry-after": "30",
591
+ "x-ratelimit-remaining": "0"
592
+ },
593
+ "body": {
594
+ "message": "API rate limit exceeded",
595
+ "documentation_url": "https://docs.github.com/rest/overview/rate-limits-for-the-rest-api"
596
+ }
597
+ },
598
+ "install_500": {
599
+ "status": 500,
600
+ "body": {
601
+ "message": "Server Error"
602
+ }
603
+ },
604
+ "install_503": {
605
+ "status": 503,
606
+ "body": {
607
+ "message": "Service Unavailable"
608
+ }
609
+ }
610
+ }