@bongos/core 1.19.417 → 1.19.419

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.
Files changed (36) hide show
  1. package/.bongos-core.json +87 -32
  2. package/clients/bongos-client/README.md +1 -1
  3. package/clients/bongos-client/bongos-client.global.js +22 -0
  4. package/clients/bongos-client/index.cjs +22 -0
  5. package/clients/bongos-client/index.d.ts +33 -0
  6. package/clients/bongos-client/index.mjs +22 -0
  7. package/docs/adr/0206-own-scoped-session-revocation-no-absolute-ceiling.md +59 -0
  8. package/docs/adr/0207-connections-implementation-departures-and-honest-limits.md +90 -0
  9. package/docs/adr/README.md +2 -0
  10. package/docs/api/openapi.json +599 -3
  11. package/docs/api-reference.md +17 -2
  12. package/docs/architecture.md +1 -0
  13. package/docs/copy-inventory.md +51 -36
  14. package/docs/copy-registry.json +175 -40
  15. package/docs/file-map.md +1 -0
  16. package/docs/module-api-changelog.md +4 -0
  17. package/modules/dev-box/app/src/vendor/bongos-client.cjs +22 -0
  18. package/modules/hall-ui/public/settings-sessions.js +119 -0
  19. package/modules/hall-ui/public/settings.css +25 -0
  20. package/modules/hall-ui/public/settings.html +22 -0
  21. package/modules/platform-identity/account-visibility.js +58 -0
  22. package/modules/platform-identity/connections.js +490 -0
  23. package/modules/platform-identity/migrations/platform_identity_015_connections.sql +78 -0
  24. package/modules/platform-identity/module.json +1 -1
  25. package/modules/platform-identity/routes/connections.js +236 -0
  26. package/package-lock.json +2 -2
  27. package/package.json +1 -1
  28. package/src/bongos/db.js +46 -0
  29. package/src/bongos/route-rank-check.js +10 -0
  30. package/src/bongos/routes/my-sessions.js +128 -0
  31. package/src/bongos/routes.js +5 -0
  32. package/src/module-api.js +1 -1
  33. package/tests/connections_api.mjs +568 -0
  34. package/tests/connections_ownership.mjs +313 -0
  35. package/tests/own_scope_guard.mjs +10 -0
  36. package/tests/own_session_revoke.mjs +410 -0
@@ -77,6 +77,10 @@
77
77
  "name": "closeness",
78
78
  "description": "Endpoints under `/api/bongos/closeness`."
79
79
  },
80
+ {
81
+ "name": "connections",
82
+ "description": "Endpoints under `/api/bongos/connections`."
83
+ },
80
84
  {
81
85
  "name": "copy-desk",
82
86
  "description": "Endpoints under `/api/bongos/copy-desk`."
@@ -3435,6 +3439,330 @@
3435
3439
  ]
3436
3440
  }
3437
3441
  },
3442
+ "/connections": {
3443
+ "get": {
3444
+ "operationId": "get_connections",
3445
+ "tags": [
3446
+ "connections"
3447
+ ],
3448
+ "summary": "GET /connections",
3449
+ "description": "MY accepted connections (own data, keyed on the session). Own scope, so the counterparty floors on profile_state alone: a private account you connected with appears here and in no public list (D4 §2).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3450
+ "x-rank": "any-builder",
3451
+ "x-source": "modules/platform-identity/routes/connections.js",
3452
+ "responses": {
3453
+ "200": {
3454
+ "description": "Success.",
3455
+ "content": {
3456
+ "application/json": {
3457
+ "schema": {
3458
+ "$ref": "#/components/schemas/GetConnectionsResponse"
3459
+ }
3460
+ }
3461
+ }
3462
+ },
3463
+ "400": {
3464
+ "$ref": "#/components/responses/BadRequest"
3465
+ },
3466
+ "401": {
3467
+ "$ref": "#/components/responses/Unauthorized"
3468
+ },
3469
+ "403": {
3470
+ "$ref": "#/components/responses/Forbidden"
3471
+ }
3472
+ },
3473
+ "security": [
3474
+ {
3475
+ "builderSession": []
3476
+ }
3477
+ ]
3478
+ },
3479
+ "post": {
3480
+ "operationId": "post_connections",
3481
+ "tags": [
3482
+ "connections"
3483
+ ],
3484
+ "summary": "POST /connections",
3485
+ "description": "ask to connect. The REQUESTER is always the session; the body names only who is being asked, and it names them by public handle.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3486
+ "x-rank": "any-builder",
3487
+ "x-source": "modules/platform-identity/routes/connections.js",
3488
+ "requestBody": {
3489
+ "required": true,
3490
+ "content": {
3491
+ "application/json": {
3492
+ "schema": {
3493
+ "$ref": "#/components/schemas/PostConnectionsRequest"
3494
+ }
3495
+ }
3496
+ },
3497
+ "x-validated": true
3498
+ },
3499
+ "responses": {
3500
+ "200": {
3501
+ "description": "Success.",
3502
+ "content": {
3503
+ "application/json": {
3504
+ "schema": {
3505
+ "$ref": "#/components/schemas/PostConnectionsResponse"
3506
+ }
3507
+ }
3508
+ }
3509
+ },
3510
+ "400": {
3511
+ "$ref": "#/components/responses/ValidationFailed"
3512
+ },
3513
+ "401": {
3514
+ "$ref": "#/components/responses/Unauthorized"
3515
+ },
3516
+ "403": {
3517
+ "$ref": "#/components/responses/Forbidden"
3518
+ }
3519
+ },
3520
+ "security": [
3521
+ {
3522
+ "builderSession": []
3523
+ }
3524
+ ]
3525
+ }
3526
+ },
3527
+ "/connections/degree/{handle}": {
3528
+ "get": {
3529
+ "operationId": "get_connections_degree_handle",
3530
+ "tags": [
3531
+ "connections"
3532
+ ],
3533
+ "summary": "GET /connections/degree/:handle",
3534
+ "description": "the degree label between the CALLER and one handle, plus the mutuals it was computed from (own-scope read, D4 §4). Bounded by construction: degreeBetween caps every level and answers null past the caps.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3535
+ "x-rank": "any-builder",
3536
+ "x-source": "modules/platform-identity/routes/connections.js",
3537
+ "parameters": [
3538
+ {
3539
+ "name": "handle",
3540
+ "in": "path",
3541
+ "required": true,
3542
+ "schema": {
3543
+ "type": "string"
3544
+ },
3545
+ "description": "Path parameter `handle`."
3546
+ }
3547
+ ],
3548
+ "responses": {
3549
+ "200": {
3550
+ "description": "Success.",
3551
+ "content": {
3552
+ "application/json": {
3553
+ "schema": {
3554
+ "$ref": "#/components/schemas/GetConnectionsDegreeHandleResponse"
3555
+ }
3556
+ }
3557
+ }
3558
+ },
3559
+ "400": {
3560
+ "$ref": "#/components/responses/BadRequest"
3561
+ },
3562
+ "401": {
3563
+ "$ref": "#/components/responses/Unauthorized"
3564
+ },
3565
+ "403": {
3566
+ "$ref": "#/components/responses/Forbidden"
3567
+ },
3568
+ "404": {
3569
+ "$ref": "#/components/responses/NotFound"
3570
+ }
3571
+ },
3572
+ "security": [
3573
+ {
3574
+ "builderSession": []
3575
+ }
3576
+ ]
3577
+ }
3578
+ },
3579
+ "/connections/requests": {
3580
+ "get": {
3581
+ "operationId": "get_connections_requests",
3582
+ "tags": [
3583
+ "connections"
3584
+ ],
3585
+ "summary": "GET /connections/requests",
3586
+ "description": "MY pending requests, both directions (own data).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3587
+ "x-rank": "any-builder",
3588
+ "x-source": "modules/platform-identity/routes/connections.js",
3589
+ "responses": {
3590
+ "200": {
3591
+ "description": "Success.",
3592
+ "content": {
3593
+ "application/json": {
3594
+ "schema": {
3595
+ "$ref": "#/components/schemas/GetConnectionsRequestsResponse"
3596
+ }
3597
+ }
3598
+ }
3599
+ },
3600
+ "400": {
3601
+ "$ref": "#/components/responses/BadRequest"
3602
+ },
3603
+ "401": {
3604
+ "$ref": "#/components/responses/Unauthorized"
3605
+ },
3606
+ "403": {
3607
+ "$ref": "#/components/responses/Forbidden"
3608
+ }
3609
+ },
3610
+ "security": [
3611
+ {
3612
+ "builderSession": []
3613
+ }
3614
+ ]
3615
+ }
3616
+ },
3617
+ "/connections/{id}": {
3618
+ "delete": {
3619
+ "operationId": "delete_connections_id",
3620
+ "tags": [
3621
+ "connections"
3622
+ ],
3623
+ "summary": "DELETE /connections/:id",
3624
+ "description": "remove an accepted connection (either side may end it) or cancel a pending request I sent. An ADDRESSEE ending a pending row is a decline, not a delete, and is 404'd here so the cooldown cannot be dodged.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3625
+ "x-rank": "any-builder",
3626
+ "x-source": "modules/platform-identity/routes/connections.js",
3627
+ "parameters": [
3628
+ {
3629
+ "name": "id",
3630
+ "in": "path",
3631
+ "required": true,
3632
+ "schema": {
3633
+ "type": "string"
3634
+ },
3635
+ "description": "Path parameter `id`."
3636
+ }
3637
+ ],
3638
+ "responses": {
3639
+ "200": {
3640
+ "description": "Success.",
3641
+ "content": {
3642
+ "application/json": {
3643
+ "schema": {
3644
+ "$ref": "#/components/schemas/DeleteConnectionsIdResponse"
3645
+ }
3646
+ }
3647
+ }
3648
+ },
3649
+ "400": {
3650
+ "$ref": "#/components/responses/BadRequest"
3651
+ },
3652
+ "401": {
3653
+ "$ref": "#/components/responses/Unauthorized"
3654
+ },
3655
+ "403": {
3656
+ "$ref": "#/components/responses/Forbidden"
3657
+ },
3658
+ "404": {
3659
+ "$ref": "#/components/responses/NotFound"
3660
+ }
3661
+ },
3662
+ "security": [
3663
+ {
3664
+ "builderSession": []
3665
+ }
3666
+ ]
3667
+ }
3668
+ },
3669
+ "/connections/{id}/accept": {
3670
+ "post": {
3671
+ "operationId": "post_connections_id_accept",
3672
+ "tags": [
3673
+ "connections"
3674
+ ],
3675
+ "summary": "POST /connections/:id/accept",
3676
+ "description": "accept a request addressed to ME. The addressee is the session; a row belonging to anyone else simply does not match, and the 404 that follows is what stops a builder acting on someone else's connection.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3677
+ "x-rank": "any-builder",
3678
+ "x-source": "modules/platform-identity/routes/connections.js",
3679
+ "parameters": [
3680
+ {
3681
+ "name": "id",
3682
+ "in": "path",
3683
+ "required": true,
3684
+ "schema": {
3685
+ "type": "string"
3686
+ },
3687
+ "description": "Path parameter `id`."
3688
+ }
3689
+ ],
3690
+ "responses": {
3691
+ "200": {
3692
+ "description": "Success.",
3693
+ "content": {
3694
+ "application/json": {
3695
+ "schema": {
3696
+ "$ref": "#/components/schemas/PostConnectionsIdAcceptResponse"
3697
+ }
3698
+ }
3699
+ }
3700
+ },
3701
+ "400": {
3702
+ "$ref": "#/components/responses/BadRequest"
3703
+ },
3704
+ "401": {
3705
+ "$ref": "#/components/responses/Unauthorized"
3706
+ },
3707
+ "403": {
3708
+ "$ref": "#/components/responses/Forbidden"
3709
+ },
3710
+ "404": {
3711
+ "$ref": "#/components/responses/NotFound"
3712
+ }
3713
+ },
3714
+ "security": [
3715
+ {
3716
+ "builderSession": []
3717
+ }
3718
+ ]
3719
+ }
3720
+ },
3721
+ "/connections/{id}/decline": {
3722
+ "post": {
3723
+ "operationId": "post_connections_id_decline",
3724
+ "tags": [
3725
+ "connections"
3726
+ ],
3727
+ "summary": "POST /connections/:id/decline",
3728
+ "description": "decline a request addressed to ME. 204: the requester is never told, so there is nothing to return that they could ever observe.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
3729
+ "x-rank": "any-builder",
3730
+ "x-source": "modules/platform-identity/routes/connections.js",
3731
+ "parameters": [
3732
+ {
3733
+ "name": "id",
3734
+ "in": "path",
3735
+ "required": true,
3736
+ "schema": {
3737
+ "type": "string"
3738
+ },
3739
+ "description": "Path parameter `id`."
3740
+ }
3741
+ ],
3742
+ "responses": {
3743
+ "200": {
3744
+ "description": "Success."
3745
+ },
3746
+ "400": {
3747
+ "$ref": "#/components/responses/BadRequest"
3748
+ },
3749
+ "401": {
3750
+ "$ref": "#/components/responses/Unauthorized"
3751
+ },
3752
+ "403": {
3753
+ "$ref": "#/components/responses/Forbidden"
3754
+ },
3755
+ "404": {
3756
+ "$ref": "#/components/responses/NotFound"
3757
+ }
3758
+ },
3759
+ "security": [
3760
+ {
3761
+ "builderSession": []
3762
+ }
3763
+ ]
3764
+ }
3765
+ },
3438
3766
  "/copy-desk/flags": {
3439
3767
  "post": {
3440
3768
  "operationId": "post_copy_desk_flags",
@@ -8688,6 +9016,143 @@
8688
9016
  ]
8689
9017
  }
8690
9018
  },
9019
+ "/me/sessions": {
9020
+ "get": {
9021
+ "operationId": "get_me_sessions",
9022
+ "tags": [
9023
+ "me"
9024
+ ],
9025
+ "summary": "GET /me/sessions",
9026
+ "description": "GET /api/bongos/me/sessions — every live session on the CALLER's account. rank: any-builder (own identity only) — a builder owns their own sessions; the account is req.builder.id, never a caller-named one, so there is nothing here for a rank gate to protect.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
9027
+ "x-rank": "any-builder",
9028
+ "x-source": "src/bongos/routes/my-sessions.js",
9029
+ "responses": {
9030
+ "200": {
9031
+ "description": "Success.",
9032
+ "content": {
9033
+ "application/json": {
9034
+ "schema": {
9035
+ "$ref": "#/components/schemas/GetMeSessionsResponse"
9036
+ }
9037
+ }
9038
+ }
9039
+ },
9040
+ "400": {
9041
+ "$ref": "#/components/responses/BadRequest"
9042
+ },
9043
+ "401": {
9044
+ "$ref": "#/components/responses/Unauthorized"
9045
+ },
9046
+ "403": {
9047
+ "$ref": "#/components/responses/Forbidden"
9048
+ }
9049
+ },
9050
+ "security": [
9051
+ {
9052
+ "builderSession": []
9053
+ }
9054
+ ]
9055
+ }
9056
+ },
9057
+ "/me/sessions/revoke": {
9058
+ "post": {
9059
+ "operationId": "post_me_sessions_revoke",
9060
+ "tags": [
9061
+ "me"
9062
+ ],
9063
+ "summary": "POST /me/sessions/revoke",
9064
+ "description": "POST /api/bongos/me/sessions/revoke — kill ONE of the caller's own sessions. Body: { session_id }. Response: { ok, revoked: 0|1 }. Revoking the session that made the request is allowed and immediate: the response is written from a request that already authenticated, and the next call with that token fails. `revoked: 0` covers \"already gone\", \"never existed\" and \"not yours\" alike — the caller must not be able to probe for other people's session ids. rank: any-builder (own identity only) — the WHERE clause is the boundary.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
9065
+ "x-rank": "any-builder",
9066
+ "x-source": "src/bongos/routes/my-sessions.js",
9067
+ "requestBody": {
9068
+ "required": false,
9069
+ "content": {
9070
+ "application/json": {
9071
+ "schema": {
9072
+ "$ref": "#/components/schemas/PostMeSessionsRevokeRequest"
9073
+ }
9074
+ }
9075
+ },
9076
+ "x-validated": true
9077
+ },
9078
+ "responses": {
9079
+ "200": {
9080
+ "description": "Success.",
9081
+ "content": {
9082
+ "application/json": {
9083
+ "schema": {
9084
+ "$ref": "#/components/schemas/PostMeSessionsRevokeResponse"
9085
+ }
9086
+ }
9087
+ }
9088
+ },
9089
+ "400": {
9090
+ "$ref": "#/components/responses/ValidationFailed"
9091
+ },
9092
+ "401": {
9093
+ "$ref": "#/components/responses/Unauthorized"
9094
+ },
9095
+ "403": {
9096
+ "$ref": "#/components/responses/Forbidden"
9097
+ }
9098
+ },
9099
+ "security": [
9100
+ {
9101
+ "builderSession": []
9102
+ }
9103
+ ]
9104
+ }
9105
+ },
9106
+ "/me/sessions/revoke-all": {
9107
+ "post": {
9108
+ "operationId": "post_me_sessions_revoke_all",
9109
+ "tags": [
9110
+ "me"
9111
+ ],
9112
+ "summary": "POST /me/sessions/revoke-all",
9113
+ "description": "POST /api/bongos/me/sessions/revoke-all — sign out everywhere. Kills EVERY live session on the caller's account, the one making the request included. That total sweep is the point: this is the button somebody presses when they believe a token has leaked, and a remedy that spared one session would leave them guessing which. They sign in again afterwards. Response: { ok, revoked }. rank: any-builder (own identity only) — the sweep is keyed on req.builder.id.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
9114
+ "x-rank": "any-builder",
9115
+ "x-source": "src/bongos/routes/my-sessions.js",
9116
+ "requestBody": {
9117
+ "required": false,
9118
+ "content": {
9119
+ "application/json": {
9120
+ "schema": {
9121
+ "type": "object",
9122
+ "additionalProperties": true
9123
+ }
9124
+ }
9125
+ },
9126
+ "x-validated": true
9127
+ },
9128
+ "responses": {
9129
+ "200": {
9130
+ "description": "Success.",
9131
+ "content": {
9132
+ "application/json": {
9133
+ "schema": {
9134
+ "$ref": "#/components/schemas/PostMeSessionsRevokeAllResponse"
9135
+ }
9136
+ }
9137
+ }
9138
+ },
9139
+ "400": {
9140
+ "$ref": "#/components/responses/ValidationFailed"
9141
+ },
9142
+ "401": {
9143
+ "$ref": "#/components/responses/Unauthorized"
9144
+ },
9145
+ "403": {
9146
+ "$ref": "#/components/responses/Forbidden"
9147
+ }
9148
+ },
9149
+ "security": [
9150
+ {
9151
+ "builderSession": []
9152
+ }
9153
+ ]
9154
+ }
9155
+ },
8691
9156
  "/me/skill-prefs": {
8692
9157
  "get": {
8693
9158
  "operationId": "get_me_skill_prefs",
@@ -14914,6 +15379,15 @@
14914
15379
  "deleted"
14915
15380
  ]
14916
15381
  },
15382
+ "DeleteConnectionsIdResponse": {
15383
+ "type": "object",
15384
+ "properties": {
15385
+ "outcome": {}
15386
+ },
15387
+ "required": [
15388
+ "outcome"
15389
+ ]
15390
+ },
14917
15391
  "DeleteDependenciesResponse": {
14918
15392
  "type": "object",
14919
15393
  "properties": {
@@ -15348,6 +15822,49 @@
15348
15822
  "why"
15349
15823
  ]
15350
15824
  },
15825
+ "GetConnectionsDegreeHandleResponse": {
15826
+ "type": "object",
15827
+ "properties": {
15828
+ "handle": {},
15829
+ "degree": {},
15830
+ "mutuals": {},
15831
+ "mutual_count": {},
15832
+ "truncated": {}
15833
+ },
15834
+ "required": [
15835
+ "handle",
15836
+ "degree",
15837
+ "mutuals",
15838
+ "mutual_count",
15839
+ "truncated"
15840
+ ]
15841
+ },
15842
+ "GetConnectionsRequestsResponse": {
15843
+ "type": "object",
15844
+ "properties": {
15845
+ "incoming": {},
15846
+ "outgoing": {},
15847
+ "incoming_count": {},
15848
+ "outgoing_count": {}
15849
+ },
15850
+ "required": [
15851
+ "incoming",
15852
+ "outgoing",
15853
+ "incoming_count",
15854
+ "outgoing_count"
15855
+ ]
15856
+ },
15857
+ "GetConnectionsResponse": {
15858
+ "type": "object",
15859
+ "properties": {
15860
+ "connections": {},
15861
+ "count": {}
15862
+ },
15863
+ "required": [
15864
+ "connections",
15865
+ "count"
15866
+ ]
15867
+ },
15351
15868
  "GetDiscordChannelsPlanResponse": {
15352
15869
  "type": "object",
15353
15870
  "properties": {
@@ -15701,6 +16218,15 @@
15701
16218
  "ships"
15702
16219
  ]
15703
16220
  },
16221
+ "GetMeSessionsResponse": {
16222
+ "type": "object",
16223
+ "properties": {
16224
+ "sessions": {}
16225
+ },
16226
+ "required": [
16227
+ "sessions"
16228
+ ]
16229
+ },
15704
16230
  "GetMeSkillPrefsResponse": {
15705
16231
  "type": "object",
15706
16232
  "properties": {
@@ -17786,6 +18312,41 @@
17786
18312
  "reward"
17787
18313
  ]
17788
18314
  },
18315
+ "PostConnectionsIdAcceptResponse": {
18316
+ "type": "object",
18317
+ "properties": {
18318
+ "status": {}
18319
+ },
18320
+ "required": [
18321
+ "status"
18322
+ ]
18323
+ },
18324
+ "PostConnectionsRequest": {
18325
+ "type": "object",
18326
+ "properties": {
18327
+ "handle": {
18328
+ "type": "string",
18329
+ "minLength": 1,
18330
+ "maxLength": 39
18331
+ },
18332
+ "note": {
18333
+ "type": "string"
18334
+ }
18335
+ },
18336
+ "required": [
18337
+ "handle"
18338
+ ],
18339
+ "additionalProperties": false
18340
+ },
18341
+ "PostConnectionsResponse": {
18342
+ "type": "object",
18343
+ "properties": {
18344
+ "status": {}
18345
+ },
18346
+ "required": [
18347
+ "status"
18348
+ ]
18349
+ },
17789
18350
  "PostCopyDeskFlagsIdCloseRequest": {
17790
18351
  "type": "object",
17791
18352
  "properties": {
@@ -18997,6 +19558,41 @@
18997
19558
  "linked"
18998
19559
  ]
18999
19560
  },
19561
+ "PostMeSessionsRevokeAllResponse": {
19562
+ "type": "object",
19563
+ "properties": {
19564
+ "ok": {
19565
+ "type": "boolean"
19566
+ },
19567
+ "revoked": {}
19568
+ },
19569
+ "required": [
19570
+ "ok",
19571
+ "revoked"
19572
+ ]
19573
+ },
19574
+ "PostMeSessionsRevokeRequest": {
19575
+ "type": "object",
19576
+ "properties": {
19577
+ "session_id": {
19578
+ "$ref": "#/components/schemas/StringifiableId"
19579
+ }
19580
+ },
19581
+ "additionalProperties": false
19582
+ },
19583
+ "PostMeSessionsRevokeResponse": {
19584
+ "type": "object",
19585
+ "properties": {
19586
+ "ok": {
19587
+ "type": "boolean"
19588
+ },
19589
+ "revoked": {}
19590
+ },
19591
+ "required": [
19592
+ "ok",
19593
+ "revoked"
19594
+ ]
19595
+ },
19000
19596
  "PostMemoryBuildersBuilderIdBfgWriteRequest": {
19001
19597
  "type": "object",
19002
19598
  "properties": {
@@ -20666,9 +21262,9 @@
20666
21262
  "description": "A required dependency/feature is not configured or is temporarily down."
20667
21263
  }
20668
21264
  },
20669
- "x-endpoint-count": 327,
20670
- "x-schema-count": 361,
21265
+ "x-endpoint-count": 337,
21266
+ "x-schema-count": 372,
20671
21267
  "x-undocumented-bodies": 9,
20672
- "x-response-schemas": 244,
21268
+ "x-response-schemas": 253,
20673
21269
  "x-generated-by": "scripts/gds/gen-api-docs.js"
20674
21270
  }