@technomoron/api-server-base 2.0.0-beta.21 → 2.0.0-beta.22

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.
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "API Server Base",
5
- "version": "2.0.0-beta.19",
5
+ "version": "2.0.0-beta.21",
6
6
  "description": "OpenAPI reference for ApiServer base endpoints and optional modules. Auth, passkey, and oauth modules are optional and require the corresponding module to be enabled in the ApiServer config. Base endpoints are always available."
7
7
  },
8
8
  "servers": [
@@ -43,11 +43,15 @@
43
43
  "application/json": {
44
44
  "schema": {
45
45
  "allOf": [
46
- { "$ref": "#/components/schemas/ApiResponse" },
46
+ {
47
+ "$ref": "#/components/schemas/ApiResponse"
48
+ },
47
49
  {
48
50
  "type": "object",
49
51
  "properties": {
50
- "data": { "$ref": "#/components/schemas/PingResponseData" }
52
+ "data": {
53
+ "$ref": "#/components/schemas/PingResponseData"
54
+ }
51
55
  },
52
56
  "required": ["data"]
53
57
  }
@@ -69,7 +73,9 @@
69
73
  "required": true,
70
74
  "content": {
71
75
  "application/json": {
72
- "schema": { "$ref": "#/components/schemas/LoginRequest" }
76
+ "schema": {
77
+ "$ref": "#/components/schemas/LoginRequest"
78
+ }
73
79
  }
74
80
  }
75
81
  },
@@ -80,11 +86,15 @@
80
86
  "application/json": {
81
87
  "schema": {
82
88
  "allOf": [
83
- { "$ref": "#/components/schemas/ApiResponse" },
89
+ {
90
+ "$ref": "#/components/schemas/ApiResponse"
91
+ },
84
92
  {
85
93
  "type": "object",
86
94
  "properties": {
87
- "data": { "$ref": "#/components/schemas/AuthTokensResponseData" }
95
+ "data": {
96
+ "$ref": "#/components/schemas/AuthTokensResponseData"
97
+ }
88
98
  },
89
99
  "required": ["data"]
90
100
  }
@@ -99,11 +109,15 @@
99
109
  "application/json": {
100
110
  "schema": {
101
111
  "allOf": [
102
- { "$ref": "#/components/schemas/ApiResponse" },
112
+ {
113
+ "$ref": "#/components/schemas/ApiResponse"
114
+ },
103
115
  {
104
116
  "type": "object",
105
117
  "properties": {
106
- "data": { "type": "null" }
118
+ "data": {
119
+ "type": "null"
120
+ }
107
121
  },
108
122
  "required": ["data"]
109
123
  }
@@ -120,12 +134,18 @@
120
134
  "tags": ["auth"],
121
135
  "summary": "Refresh access and refresh tokens",
122
136
  "description": "Auth: required. Reissues tokens using a refresh token supplied in the body or refresh cookie.",
123
- "security": [{ "refreshTokenCookie": [] }],
137
+ "security": [
138
+ {
139
+ "refreshTokenCookie": []
140
+ }
141
+ ],
124
142
  "requestBody": {
125
143
  "required": false,
126
144
  "content": {
127
145
  "application/json": {
128
- "schema": { "$ref": "#/components/schemas/RefreshRequest" }
146
+ "schema": {
147
+ "$ref": "#/components/schemas/RefreshRequest"
148
+ }
129
149
  }
130
150
  }
131
151
  },
@@ -136,11 +156,15 @@
136
156
  "application/json": {
137
157
  "schema": {
138
158
  "allOf": [
139
- { "$ref": "#/components/schemas/ApiResponse" },
159
+ {
160
+ "$ref": "#/components/schemas/ApiResponse"
161
+ },
140
162
  {
141
163
  "type": "object",
142
164
  "properties": {
143
- "data": { "$ref": "#/components/schemas/AuthTokensResponseData" }
165
+ "data": {
166
+ "$ref": "#/components/schemas/AuthTokensResponseData"
167
+ }
144
168
  },
145
169
  "required": ["data"]
146
170
  }
@@ -155,11 +179,15 @@
155
179
  "application/json": {
156
180
  "schema": {
157
181
  "allOf": [
158
- { "$ref": "#/components/schemas/ApiResponse" },
182
+ {
183
+ "$ref": "#/components/schemas/ApiResponse"
184
+ },
159
185
  {
160
186
  "type": "object",
161
187
  "properties": {
162
- "data": { "type": "null" }
188
+ "data": {
189
+ "type": "null"
190
+ }
163
191
  },
164
192
  "required": ["data"]
165
193
  }
@@ -174,11 +202,15 @@
174
202
  "application/json": {
175
203
  "schema": {
176
204
  "allOf": [
177
- { "$ref": "#/components/schemas/ApiResponse" },
205
+ {
206
+ "$ref": "#/components/schemas/ApiResponse"
207
+ },
178
208
  {
179
209
  "type": "object",
180
210
  "properties": {
181
- "data": { "type": "null" }
211
+ "data": {
212
+ "type": "null"
213
+ }
182
214
  },
183
215
  "required": ["data"]
184
216
  }
@@ -195,12 +227,18 @@
195
227
  "tags": ["auth"],
196
228
  "summary": "Logout and revoke the refresh token",
197
229
  "description": "Auth: required. Revokes the refresh token supplied in the body or refresh cookie and clears auth cookies.",
198
- "security": [{ "refreshTokenCookie": [] }],
230
+ "security": [
231
+ {
232
+ "refreshTokenCookie": []
233
+ }
234
+ ],
199
235
  "requestBody": {
200
236
  "required": false,
201
237
  "content": {
202
238
  "application/json": {
203
- "schema": { "$ref": "#/components/schemas/LogoutRequest" }
239
+ "schema": {
240
+ "$ref": "#/components/schemas/LogoutRequest"
241
+ }
204
242
  }
205
243
  }
206
244
  },
@@ -211,11 +249,15 @@
211
249
  "application/json": {
212
250
  "schema": {
213
251
  "allOf": [
214
- { "$ref": "#/components/schemas/ApiResponse" },
252
+ {
253
+ "$ref": "#/components/schemas/ApiResponse"
254
+ },
215
255
  {
216
256
  "type": "object",
217
257
  "properties": {
218
- "data": { "$ref": "#/components/schemas/LogoutResponseData" }
258
+ "data": {
259
+ "$ref": "#/components/schemas/LogoutResponseData"
260
+ }
219
261
  },
220
262
  "required": ["data"]
221
263
  }
@@ -230,11 +272,15 @@
230
272
  "application/json": {
231
273
  "schema": {
232
274
  "allOf": [
233
- { "$ref": "#/components/schemas/ApiResponse" },
275
+ {
276
+ "$ref": "#/components/schemas/ApiResponse"
277
+ },
234
278
  {
235
279
  "type": "object",
236
280
  "properties": {
237
- "data": { "type": "null" }
281
+ "data": {
282
+ "type": "null"
283
+ }
238
284
  },
239
285
  "required": ["data"]
240
286
  }
@@ -251,12 +297,18 @@
251
297
  "tags": ["auth"],
252
298
  "summary": "Resolve the current identity",
253
299
  "description": "Auth: required. Resolves the effective user from the refresh token and optionally refreshes the access token.",
254
- "security": [{ "refreshTokenCookie": [] }],
300
+ "security": [
301
+ {
302
+ "refreshTokenCookie": []
303
+ }
304
+ ],
255
305
  "requestBody": {
256
306
  "required": false,
257
307
  "content": {
258
308
  "application/json": {
259
- "schema": { "$ref": "#/components/schemas/WhoAmIRequest" }
309
+ "schema": {
310
+ "$ref": "#/components/schemas/WhoAmIRequest"
311
+ }
260
312
  }
261
313
  }
262
314
  },
@@ -267,11 +319,15 @@
267
319
  "application/json": {
268
320
  "schema": {
269
321
  "allOf": [
270
- { "$ref": "#/components/schemas/ApiResponse" },
322
+ {
323
+ "$ref": "#/components/schemas/ApiResponse"
324
+ },
271
325
  {
272
326
  "type": "object",
273
327
  "properties": {
274
- "data": { "$ref": "#/components/schemas/WhoAmIResponseData" }
328
+ "data": {
329
+ "$ref": "#/components/schemas/WhoAmIResponseData"
330
+ }
275
331
  },
276
332
  "required": ["data"]
277
333
  }
@@ -286,11 +342,15 @@
286
342
  "application/json": {
287
343
  "schema": {
288
344
  "allOf": [
289
- { "$ref": "#/components/schemas/ApiResponse" },
345
+ {
346
+ "$ref": "#/components/schemas/ApiResponse"
347
+ },
290
348
  {
291
349
  "type": "object",
292
350
  "properties": {
293
- "data": { "type": "null" }
351
+ "data": {
352
+ "type": "null"
353
+ }
294
354
  },
295
355
  "required": ["data"]
296
356
  }
@@ -305,11 +365,15 @@
305
365
  "application/json": {
306
366
  "schema": {
307
367
  "allOf": [
308
- { "$ref": "#/components/schemas/ApiResponse" },
368
+ {
369
+ "$ref": "#/components/schemas/ApiResponse"
370
+ },
309
371
  {
310
372
  "type": "object",
311
373
  "properties": {
312
- "data": { "type": "null" }
374
+ "data": {
375
+ "type": "null"
376
+ }
313
377
  },
314
378
  "required": ["data"]
315
379
  }
@@ -326,12 +390,24 @@
326
390
  "tags": ["auth"],
327
391
  "summary": "Start impersonating a user",
328
392
  "description": "Auth: strict. Issues tokens for a target user when impersonation is permitted.",
329
- "security": [{ "accessTokenBearer": [] }, { "accessTokenCookie": [] }, { "apiKeyBearer": [] }],
393
+ "security": [
394
+ {
395
+ "accessTokenBearer": []
396
+ },
397
+ {
398
+ "accessTokenCookie": []
399
+ },
400
+ {
401
+ "apiKeyBearer": []
402
+ }
403
+ ],
330
404
  "requestBody": {
331
405
  "required": true,
332
406
  "content": {
333
407
  "application/json": {
334
- "schema": { "$ref": "#/components/schemas/ImpersonateRequest" }
408
+ "schema": {
409
+ "$ref": "#/components/schemas/ImpersonateRequest"
410
+ }
335
411
  }
336
412
  }
337
413
  },
@@ -342,11 +418,15 @@
342
418
  "application/json": {
343
419
  "schema": {
344
420
  "allOf": [
345
- { "$ref": "#/components/schemas/ApiResponse" },
421
+ {
422
+ "$ref": "#/components/schemas/ApiResponse"
423
+ },
346
424
  {
347
425
  "type": "object",
348
426
  "properties": {
349
- "data": { "$ref": "#/components/schemas/AuthTokensResponseData" }
427
+ "data": {
428
+ "$ref": "#/components/schemas/AuthTokensResponseData"
429
+ }
350
430
  },
351
431
  "required": ["data"]
352
432
  }
@@ -361,11 +441,15 @@
361
441
  "application/json": {
362
442
  "schema": {
363
443
  "allOf": [
364
- { "$ref": "#/components/schemas/ApiResponse" },
444
+ {
445
+ "$ref": "#/components/schemas/ApiResponse"
446
+ },
365
447
  {
366
448
  "type": "object",
367
449
  "properties": {
368
- "data": { "type": "null" }
450
+ "data": {
451
+ "type": "null"
452
+ }
369
453
  },
370
454
  "required": ["data"]
371
455
  }
@@ -380,11 +464,15 @@
380
464
  "application/json": {
381
465
  "schema": {
382
466
  "allOf": [
383
- { "$ref": "#/components/schemas/ApiResponse" },
467
+ {
468
+ "$ref": "#/components/schemas/ApiResponse"
469
+ },
384
470
  {
385
471
  "type": "object",
386
472
  "properties": {
387
- "data": { "type": "null" }
473
+ "data": {
474
+ "type": "null"
475
+ }
388
476
  },
389
477
  "required": ["data"]
390
478
  }
@@ -399,11 +487,15 @@
399
487
  "application/json": {
400
488
  "schema": {
401
489
  "allOf": [
402
- { "$ref": "#/components/schemas/ApiResponse" },
490
+ {
491
+ "$ref": "#/components/schemas/ApiResponse"
492
+ },
403
493
  {
404
494
  "type": "object",
405
495
  "properties": {
406
- "data": { "type": "null" }
496
+ "data": {
497
+ "type": "null"
498
+ }
407
499
  },
408
500
  "required": ["data"]
409
501
  }
@@ -418,12 +510,24 @@
418
510
  "tags": ["auth"],
419
511
  "summary": "Stop impersonating",
420
512
  "description": "Auth: strict. Reissues tokens for the real user to end impersonation.",
421
- "security": [{ "accessTokenBearer": [] }, { "accessTokenCookie": [] }, { "apiKeyBearer": [] }],
513
+ "security": [
514
+ {
515
+ "accessTokenBearer": []
516
+ },
517
+ {
518
+ "accessTokenCookie": []
519
+ },
520
+ {
521
+ "apiKeyBearer": []
522
+ }
523
+ ],
422
524
  "requestBody": {
423
525
  "required": false,
424
526
  "content": {
425
527
  "application/json": {
426
- "schema": { "$ref": "#/components/schemas/ImpersonationEndRequest" }
528
+ "schema": {
529
+ "$ref": "#/components/schemas/ImpersonationEndRequest"
530
+ }
427
531
  }
428
532
  }
429
533
  },
@@ -434,11 +538,15 @@
434
538
  "application/json": {
435
539
  "schema": {
436
540
  "allOf": [
437
- { "$ref": "#/components/schemas/ApiResponse" },
541
+ {
542
+ "$ref": "#/components/schemas/ApiResponse"
543
+ },
438
544
  {
439
545
  "type": "object",
440
546
  "properties": {
441
- "data": { "$ref": "#/components/schemas/AuthTokensResponseData" }
547
+ "data": {
548
+ "$ref": "#/components/schemas/AuthTokensResponseData"
549
+ }
442
550
  },
443
551
  "required": ["data"]
444
552
  }
@@ -453,11 +561,15 @@
453
561
  "application/json": {
454
562
  "schema": {
455
563
  "allOf": [
456
- { "$ref": "#/components/schemas/ApiResponse" },
564
+ {
565
+ "$ref": "#/components/schemas/ApiResponse"
566
+ },
457
567
  {
458
568
  "type": "object",
459
569
  "properties": {
460
- "data": { "type": "null" }
570
+ "data": {
571
+ "type": "null"
572
+ }
461
573
  },
462
574
  "required": ["data"]
463
575
  }
@@ -472,11 +584,15 @@
472
584
  "application/json": {
473
585
  "schema": {
474
586
  "allOf": [
475
- { "$ref": "#/components/schemas/ApiResponse" },
587
+ {
588
+ "$ref": "#/components/schemas/ApiResponse"
589
+ },
476
590
  {
477
591
  "type": "object",
478
592
  "properties": {
479
- "data": { "type": "null" }
593
+ "data": {
594
+ "type": "null"
595
+ }
480
596
  },
481
597
  "required": ["data"]
482
598
  }
@@ -498,7 +614,9 @@
498
614
  "required": true,
499
615
  "content": {
500
616
  "application/json": {
501
- "schema": { "$ref": "#/components/schemas/PasskeyChallengeRequest" }
617
+ "schema": {
618
+ "$ref": "#/components/schemas/PasskeyChallengeRequest"
619
+ }
502
620
  }
503
621
  }
504
622
  },
@@ -509,11 +627,15 @@
509
627
  "application/json": {
510
628
  "schema": {
511
629
  "allOf": [
512
- { "$ref": "#/components/schemas/ApiResponse" },
630
+ {
631
+ "$ref": "#/components/schemas/ApiResponse"
632
+ },
513
633
  {
514
634
  "type": "object",
515
635
  "properties": {
516
- "data": { "$ref": "#/components/schemas/PasskeyChallenge" }
636
+ "data": {
637
+ "$ref": "#/components/schemas/PasskeyChallenge"
638
+ }
517
639
  },
518
640
  "required": ["data"]
519
641
  }
@@ -528,11 +650,15 @@
528
650
  "application/json": {
529
651
  "schema": {
530
652
  "allOf": [
531
- { "$ref": "#/components/schemas/ApiResponse" },
653
+ {
654
+ "$ref": "#/components/schemas/ApiResponse"
655
+ },
532
656
  {
533
657
  "type": "object",
534
658
  "properties": {
535
- "data": { "type": "null" }
659
+ "data": {
660
+ "type": "null"
661
+ }
536
662
  },
537
663
  "required": ["data"]
538
664
  }
@@ -547,11 +673,15 @@
547
673
  "application/json": {
548
674
  "schema": {
549
675
  "allOf": [
550
- { "$ref": "#/components/schemas/ApiResponse" },
676
+ {
677
+ "$ref": "#/components/schemas/ApiResponse"
678
+ },
551
679
  {
552
680
  "type": "object",
553
681
  "properties": {
554
- "data": { "type": "null" }
682
+ "data": {
683
+ "type": "null"
684
+ }
555
685
  },
556
686
  "required": ["data"]
557
687
  }
@@ -573,7 +703,9 @@
573
703
  "required": true,
574
704
  "content": {
575
705
  "application/json": {
576
- "schema": { "$ref": "#/components/schemas/PasskeyVerifyRequest" }
706
+ "schema": {
707
+ "$ref": "#/components/schemas/PasskeyVerifyRequest"
708
+ }
577
709
  }
578
710
  }
579
711
  },
@@ -584,11 +716,15 @@
584
716
  "application/json": {
585
717
  "schema": {
586
718
  "allOf": [
587
- { "$ref": "#/components/schemas/ApiResponse" },
719
+ {
720
+ "$ref": "#/components/schemas/ApiResponse"
721
+ },
588
722
  {
589
723
  "type": "object",
590
724
  "properties": {
591
- "data": { "$ref": "#/components/schemas/AuthTokensResponseData" }
725
+ "data": {
726
+ "$ref": "#/components/schemas/AuthTokensResponseData"
727
+ }
592
728
  },
593
729
  "required": ["data"]
594
730
  }
@@ -603,11 +739,15 @@
603
739
  "application/json": {
604
740
  "schema": {
605
741
  "allOf": [
606
- { "$ref": "#/components/schemas/ApiResponse" },
742
+ {
743
+ "$ref": "#/components/schemas/ApiResponse"
744
+ },
607
745
  {
608
746
  "type": "object",
609
747
  "properties": {
610
- "data": { "type": "null" }
748
+ "data": {
749
+ "type": "null"
750
+ }
611
751
  },
612
752
  "required": ["data"]
613
753
  }
@@ -622,11 +762,15 @@
622
762
  "application/json": {
623
763
  "schema": {
624
764
  "allOf": [
625
- { "$ref": "#/components/schemas/ApiResponse" },
765
+ {
766
+ "$ref": "#/components/schemas/ApiResponse"
767
+ },
626
768
  {
627
769
  "type": "object",
628
770
  "properties": {
629
- "data": { "type": "null" }
771
+ "data": {
772
+ "type": "null"
773
+ }
630
774
  },
631
775
  "required": ["data"]
632
776
  }
@@ -641,11 +785,15 @@
641
785
  "application/json": {
642
786
  "schema": {
643
787
  "allOf": [
644
- { "$ref": "#/components/schemas/ApiResponse" },
788
+ {
789
+ "$ref": "#/components/schemas/ApiResponse"
790
+ },
645
791
  {
646
792
  "type": "object",
647
793
  "properties": {
648
- "data": { "type": "null" }
794
+ "data": {
795
+ "type": "null"
796
+ }
649
797
  },
650
798
  "required": ["data"]
651
799
  }
@@ -660,11 +808,15 @@
660
808
  "application/json": {
661
809
  "schema": {
662
810
  "allOf": [
663
- { "$ref": "#/components/schemas/ApiResponse" },
811
+ {
812
+ "$ref": "#/components/schemas/ApiResponse"
813
+ },
664
814
  {
665
815
  "type": "object",
666
816
  "properties": {
667
- "data": { "type": "null" }
817
+ "data": {
818
+ "type": "null"
819
+ }
668
820
  },
669
821
  "required": ["data"]
670
822
  }
@@ -681,7 +833,17 @@
681
833
  "tags": ["passkey"],
682
834
  "summary": "List passkey credentials",
683
835
  "description": "Auth: strict. Returns passkey credentials for the authenticated user.",
684
- "security": [{ "accessTokenBearer": [] }, { "accessTokenCookie": [] }, { "apiKeyBearer": [] }],
836
+ "security": [
837
+ {
838
+ "accessTokenBearer": []
839
+ },
840
+ {
841
+ "accessTokenCookie": []
842
+ },
843
+ {
844
+ "apiKeyBearer": []
845
+ }
846
+ ],
685
847
  "responses": {
686
848
  "200": {
687
849
  "description": "Credentials for the current user.",
@@ -689,11 +851,15 @@
689
851
  "application/json": {
690
852
  "schema": {
691
853
  "allOf": [
692
- { "$ref": "#/components/schemas/ApiResponse" },
854
+ {
855
+ "$ref": "#/components/schemas/ApiResponse"
856
+ },
693
857
  {
694
858
  "type": "object",
695
859
  "properties": {
696
- "data": { "$ref": "#/components/schemas/PasskeyListResponseData" }
860
+ "data": {
861
+ "$ref": "#/components/schemas/PasskeyListResponseData"
862
+ }
697
863
  },
698
864
  "required": ["data"]
699
865
  }
@@ -708,11 +874,15 @@
708
874
  "application/json": {
709
875
  "schema": {
710
876
  "allOf": [
711
- { "$ref": "#/components/schemas/ApiResponse" },
877
+ {
878
+ "$ref": "#/components/schemas/ApiResponse"
879
+ },
712
880
  {
713
881
  "type": "object",
714
882
  "properties": {
715
- "data": { "type": "null" }
883
+ "data": {
884
+ "type": "null"
885
+ }
716
886
  },
717
887
  "required": ["data"]
718
888
  }
@@ -727,11 +897,15 @@
727
897
  "application/json": {
728
898
  "schema": {
729
899
  "allOf": [
730
- { "$ref": "#/components/schemas/ApiResponse" },
900
+ {
901
+ "$ref": "#/components/schemas/ApiResponse"
902
+ },
731
903
  {
732
904
  "type": "object",
733
905
  "properties": {
734
- "data": { "type": "null" }
906
+ "data": {
907
+ "type": "null"
908
+ }
735
909
  },
736
910
  "required": ["data"]
737
911
  }
@@ -746,11 +920,15 @@
746
920
  "application/json": {
747
921
  "schema": {
748
922
  "allOf": [
749
- { "$ref": "#/components/schemas/ApiResponse" },
923
+ {
924
+ "$ref": "#/components/schemas/ApiResponse"
925
+ },
750
926
  {
751
927
  "type": "object",
752
928
  "properties": {
753
- "data": { "type": "null" }
929
+ "data": {
930
+ "type": "null"
931
+ }
754
932
  },
755
933
  "required": ["data"]
756
934
  }
@@ -767,14 +945,26 @@
767
945
  "tags": ["passkey"],
768
946
  "summary": "Delete a passkey credential",
769
947
  "description": "Auth: strict. Deletes the passkey credential identified by the path parameter.",
770
- "security": [{ "accessTokenBearer": [] }, { "accessTokenCookie": [] }, { "apiKeyBearer": [] }],
948
+ "security": [
949
+ {
950
+ "accessTokenBearer": []
951
+ },
952
+ {
953
+ "accessTokenCookie": []
954
+ },
955
+ {
956
+ "apiKeyBearer": []
957
+ }
958
+ ],
771
959
  "parameters": [
772
960
  {
773
961
  "name": "credentialId",
774
962
  "in": "path",
775
963
  "required": true,
776
964
  "description": "Credential id (base64url).",
777
- "schema": { "type": "string" }
965
+ "schema": {
966
+ "type": "string"
967
+ }
778
968
  }
779
969
  ],
780
970
  "responses": {
@@ -784,11 +974,15 @@
784
974
  "application/json": {
785
975
  "schema": {
786
976
  "allOf": [
787
- { "$ref": "#/components/schemas/ApiResponse" },
977
+ {
978
+ "$ref": "#/components/schemas/ApiResponse"
979
+ },
788
980
  {
789
981
  "type": "object",
790
982
  "properties": {
791
- "data": { "$ref": "#/components/schemas/PasskeyDeleteResponseData" }
983
+ "data": {
984
+ "$ref": "#/components/schemas/PasskeyDeleteResponseData"
985
+ }
792
986
  },
793
987
  "required": ["data"]
794
988
  }
@@ -803,11 +997,15 @@
803
997
  "application/json": {
804
998
  "schema": {
805
999
  "allOf": [
806
- { "$ref": "#/components/schemas/ApiResponse" },
1000
+ {
1001
+ "$ref": "#/components/schemas/ApiResponse"
1002
+ },
807
1003
  {
808
1004
  "type": "object",
809
1005
  "properties": {
810
- "data": { "type": "null" }
1006
+ "data": {
1007
+ "type": "null"
1008
+ }
811
1009
  },
812
1010
  "required": ["data"]
813
1011
  }
@@ -822,11 +1020,15 @@
822
1020
  "application/json": {
823
1021
  "schema": {
824
1022
  "allOf": [
825
- { "$ref": "#/components/schemas/ApiResponse" },
1023
+ {
1024
+ "$ref": "#/components/schemas/ApiResponse"
1025
+ },
826
1026
  {
827
1027
  "type": "object",
828
1028
  "properties": {
829
- "data": { "type": "null" }
1029
+ "data": {
1030
+ "type": "null"
1031
+ }
830
1032
  },
831
1033
  "required": ["data"]
832
1034
  }
@@ -841,11 +1043,15 @@
841
1043
  "application/json": {
842
1044
  "schema": {
843
1045
  "allOf": [
844
- { "$ref": "#/components/schemas/ApiResponse" },
1046
+ {
1047
+ "$ref": "#/components/schemas/ApiResponse"
1048
+ },
845
1049
  {
846
1050
  "type": "object",
847
1051
  "properties": {
848
- "data": { "type": "null" }
1052
+ "data": {
1053
+ "type": "null"
1054
+ }
849
1055
  },
850
1056
  "required": ["data"]
851
1057
  }
@@ -860,11 +1066,15 @@
860
1066
  "application/json": {
861
1067
  "schema": {
862
1068
  "allOf": [
863
- { "$ref": "#/components/schemas/ApiResponse" },
1069
+ {
1070
+ "$ref": "#/components/schemas/ApiResponse"
1071
+ },
864
1072
  {
865
1073
  "type": "object",
866
1074
  "properties": {
867
- "data": { "type": "null" }
1075
+ "data": {
1076
+ "type": "null"
1077
+ }
868
1078
  },
869
1079
  "required": ["data"]
870
1080
  }
@@ -879,11 +1089,15 @@
879
1089
  "application/json": {
880
1090
  "schema": {
881
1091
  "allOf": [
882
- { "$ref": "#/components/schemas/ApiResponse" },
1092
+ {
1093
+ "$ref": "#/components/schemas/ApiResponse"
1094
+ },
883
1095
  {
884
1096
  "type": "object",
885
1097
  "properties": {
886
- "data": { "type": "null" }
1098
+ "data": {
1099
+ "type": "null"
1100
+ }
887
1101
  },
888
1102
  "required": ["data"]
889
1103
  }
@@ -907,14 +1121,18 @@
907
1121
  "in": "path",
908
1122
  "required": true,
909
1123
  "description": "OAuth provider identifier.",
910
- "schema": { "type": "string" }
1124
+ "schema": {
1125
+ "type": "string"
1126
+ }
911
1127
  }
912
1128
  ],
913
1129
  "requestBody": {
914
1130
  "required": false,
915
1131
  "content": {
916
1132
  "application/json": {
917
- "schema": { "$ref": "#/components/schemas/OAuthStartRequest" }
1133
+ "schema": {
1134
+ "$ref": "#/components/schemas/OAuthStartRequest"
1135
+ }
918
1136
  }
919
1137
  }
920
1138
  },
@@ -925,11 +1143,15 @@
925
1143
  "application/json": {
926
1144
  "schema": {
927
1145
  "allOf": [
928
- { "$ref": "#/components/schemas/ApiResponse" },
1146
+ {
1147
+ "$ref": "#/components/schemas/ApiResponse"
1148
+ },
929
1149
  {
930
1150
  "type": "object",
931
1151
  "properties": {
932
- "data": { "$ref": "#/components/schemas/OAuthStartResponse" }
1152
+ "data": {
1153
+ "$ref": "#/components/schemas/OAuthStartResponse"
1154
+ }
933
1155
  },
934
1156
  "required": ["data"]
935
1157
  }
@@ -944,11 +1166,15 @@
944
1166
  "application/json": {
945
1167
  "schema": {
946
1168
  "allOf": [
947
- { "$ref": "#/components/schemas/ApiResponse" },
1169
+ {
1170
+ "$ref": "#/components/schemas/ApiResponse"
1171
+ },
948
1172
  {
949
1173
  "type": "object",
950
1174
  "properties": {
951
- "data": { "type": "null" }
1175
+ "data": {
1176
+ "type": "null"
1177
+ }
952
1178
  },
953
1179
  "required": ["data"]
954
1180
  }
@@ -963,11 +1189,15 @@
963
1189
  "application/json": {
964
1190
  "schema": {
965
1191
  "allOf": [
966
- { "$ref": "#/components/schemas/ApiResponse" },
1192
+ {
1193
+ "$ref": "#/components/schemas/ApiResponse"
1194
+ },
967
1195
  {
968
1196
  "type": "object",
969
1197
  "properties": {
970
- "data": { "type": "null" }
1198
+ "data": {
1199
+ "type": "null"
1200
+ }
971
1201
  },
972
1202
  "required": ["data"]
973
1203
  }
@@ -991,7 +1221,9 @@
991
1221
  "in": "path",
992
1222
  "required": true,
993
1223
  "description": "OAuth provider identifier.",
994
- "schema": { "type": "string" }
1224
+ "schema": {
1225
+ "type": "string"
1226
+ }
995
1227
  }
996
1228
  ],
997
1229
  "requestBody": {
@@ -1012,11 +1244,15 @@
1012
1244
  "application/json": {
1013
1245
  "schema": {
1014
1246
  "allOf": [
1015
- { "$ref": "#/components/schemas/ApiResponse" },
1247
+ {
1248
+ "$ref": "#/components/schemas/ApiResponse"
1249
+ },
1016
1250
  {
1017
1251
  "type": "object",
1018
1252
  "properties": {
1019
- "data": { "$ref": "#/components/schemas/OAuthCallbackResponse" }
1253
+ "data": {
1254
+ "$ref": "#/components/schemas/OAuthCallbackResponse"
1255
+ }
1020
1256
  },
1021
1257
  "required": ["data"]
1022
1258
  }
@@ -1031,11 +1267,15 @@
1031
1267
  "application/json": {
1032
1268
  "schema": {
1033
1269
  "allOf": [
1034
- { "$ref": "#/components/schemas/ApiResponse" },
1270
+ {
1271
+ "$ref": "#/components/schemas/ApiResponse"
1272
+ },
1035
1273
  {
1036
1274
  "type": "object",
1037
1275
  "properties": {
1038
- "data": { "type": "null" }
1276
+ "data": {
1277
+ "type": "null"
1278
+ }
1039
1279
  },
1040
1280
  "required": ["data"]
1041
1281
  }
@@ -1050,11 +1290,15 @@
1050
1290
  "application/json": {
1051
1291
  "schema": {
1052
1292
  "allOf": [
1053
- { "$ref": "#/components/schemas/ApiResponse" },
1293
+ {
1294
+ "$ref": "#/components/schemas/ApiResponse"
1295
+ },
1054
1296
  {
1055
1297
  "type": "object",
1056
1298
  "properties": {
1057
- "data": { "type": "null" }
1299
+ "data": {
1300
+ "type": "null"
1301
+ }
1058
1302
  },
1059
1303
  "required": ["data"]
1060
1304
  }
@@ -1071,12 +1315,18 @@
1071
1315
  "tags": ["oauth"],
1072
1316
  "summary": "Issue an authorization code",
1073
1317
  "description": "Auth: required. Issues an authorization code for an authenticated user using a refresh token cookie or login credentials.",
1074
- "security": [{ "refreshTokenCookie": [] }],
1318
+ "security": [
1319
+ {
1320
+ "refreshTokenCookie": []
1321
+ }
1322
+ ],
1075
1323
  "requestBody": {
1076
1324
  "required": true,
1077
1325
  "content": {
1078
1326
  "application/json": {
1079
- "schema": { "$ref": "#/components/schemas/OAuthAuthorizeRequest" }
1327
+ "schema": {
1328
+ "$ref": "#/components/schemas/OAuthAuthorizeRequest"
1329
+ }
1080
1330
  }
1081
1331
  }
1082
1332
  },
@@ -1087,11 +1337,15 @@
1087
1337
  "application/json": {
1088
1338
  "schema": {
1089
1339
  "allOf": [
1090
- { "$ref": "#/components/schemas/ApiResponse" },
1340
+ {
1341
+ "$ref": "#/components/schemas/ApiResponse"
1342
+ },
1091
1343
  {
1092
1344
  "type": "object",
1093
1345
  "properties": {
1094
- "data": { "$ref": "#/components/schemas/OAuthAuthorizeResponse" }
1346
+ "data": {
1347
+ "$ref": "#/components/schemas/OAuthAuthorizeResponse"
1348
+ }
1095
1349
  },
1096
1350
  "required": ["data"]
1097
1351
  }
@@ -1106,11 +1360,15 @@
1106
1360
  "application/json": {
1107
1361
  "schema": {
1108
1362
  "allOf": [
1109
- { "$ref": "#/components/schemas/ApiResponse" },
1363
+ {
1364
+ "$ref": "#/components/schemas/ApiResponse"
1365
+ },
1110
1366
  {
1111
1367
  "type": "object",
1112
1368
  "properties": {
1113
- "data": { "type": "null" }
1369
+ "data": {
1370
+ "type": "null"
1371
+ }
1114
1372
  },
1115
1373
  "required": ["data"]
1116
1374
  }
@@ -1125,11 +1383,15 @@
1125
1383
  "application/json": {
1126
1384
  "schema": {
1127
1385
  "allOf": [
1128
- { "$ref": "#/components/schemas/ApiResponse" },
1386
+ {
1387
+ "$ref": "#/components/schemas/ApiResponse"
1388
+ },
1129
1389
  {
1130
1390
  "type": "object",
1131
1391
  "properties": {
1132
- "data": { "type": "null" }
1392
+ "data": {
1393
+ "type": "null"
1394
+ }
1133
1395
  },
1134
1396
  "required": ["data"]
1135
1397
  }
@@ -1144,11 +1406,15 @@
1144
1406
  "application/json": {
1145
1407
  "schema": {
1146
1408
  "allOf": [
1147
- { "$ref": "#/components/schemas/ApiResponse" },
1409
+ {
1410
+ "$ref": "#/components/schemas/ApiResponse"
1411
+ },
1148
1412
  {
1149
1413
  "type": "object",
1150
1414
  "properties": {
1151
- "data": { "type": "null" }
1415
+ "data": {
1416
+ "type": "null"
1417
+ }
1152
1418
  },
1153
1419
  "required": ["data"]
1154
1420
  }
@@ -1170,10 +1436,14 @@
1170
1436
  "required": true,
1171
1437
  "content": {
1172
1438
  "application/json": {
1173
- "schema": { "$ref": "#/components/schemas/OAuthTokenRequest" }
1439
+ "schema": {
1440
+ "$ref": "#/components/schemas/OAuthTokenRequest"
1441
+ }
1174
1442
  },
1175
1443
  "application/x-www-form-urlencoded": {
1176
- "schema": { "$ref": "#/components/schemas/OAuthTokenRequest" }
1444
+ "schema": {
1445
+ "$ref": "#/components/schemas/OAuthTokenRequest"
1446
+ }
1177
1447
  }
1178
1448
  }
1179
1449
  },
@@ -1184,11 +1454,15 @@
1184
1454
  "application/json": {
1185
1455
  "schema": {
1186
1456
  "allOf": [
1187
- { "$ref": "#/components/schemas/ApiResponse" },
1457
+ {
1458
+ "$ref": "#/components/schemas/ApiResponse"
1459
+ },
1188
1460
  {
1189
1461
  "type": "object",
1190
1462
  "properties": {
1191
- "data": { "$ref": "#/components/schemas/OAuthTokenResponse" }
1463
+ "data": {
1464
+ "$ref": "#/components/schemas/OAuthTokenResponse"
1465
+ }
1192
1466
  },
1193
1467
  "required": ["data"]
1194
1468
  }
@@ -1203,11 +1477,15 @@
1203
1477
  "application/json": {
1204
1478
  "schema": {
1205
1479
  "allOf": [
1206
- { "$ref": "#/components/schemas/ApiResponse" },
1480
+ {
1481
+ "$ref": "#/components/schemas/ApiResponse"
1482
+ },
1207
1483
  {
1208
1484
  "type": "object",
1209
1485
  "properties": {
1210
- "data": { "type": "null" }
1486
+ "data": {
1487
+ "type": "null"
1488
+ }
1211
1489
  },
1212
1490
  "required": ["data"]
1213
1491
  }
@@ -1222,11 +1500,15 @@
1222
1500
  "application/json": {
1223
1501
  "schema": {
1224
1502
  "allOf": [
1225
- { "$ref": "#/components/schemas/ApiResponse" },
1503
+ {
1504
+ "$ref": "#/components/schemas/ApiResponse"
1505
+ },
1226
1506
  {
1227
1507
  "type": "object",
1228
1508
  "properties": {
1229
- "data": { "type": "null" }
1509
+ "data": {
1510
+ "type": "null"
1511
+ }
1230
1512
  },
1231
1513
  "required": ["data"]
1232
1514
  }
@@ -1241,11 +1523,15 @@
1241
1523
  "application/json": {
1242
1524
  "schema": {
1243
1525
  "allOf": [
1244
- { "$ref": "#/components/schemas/ApiResponse" },
1526
+ {
1527
+ "$ref": "#/components/schemas/ApiResponse"
1528
+ },
1245
1529
  {
1246
1530
  "type": "object",
1247
1531
  "properties": {
1248
- "data": { "type": "null" }
1532
+ "data": {
1533
+ "type": "null"
1534
+ }
1249
1535
  },
1250
1536
  "required": ["data"]
1251
1537
  }
@@ -1281,7 +1567,7 @@
1281
1567
  "apiKeyBearer": {
1282
1568
  "type": "http",
1283
1569
  "scheme": "bearer",
1284
- "description": "API key via Authorization: Bearer apikey-<secret>."
1570
+ "description": "API key via Authorization: Bearer <secret> (or Bearer <prefix><secret> when apiKeyPrefix is configured). Requires apiKeyEnabled=true on the server, or a route with auth type 'apikey'. API keys support optional impersonation: when the key record includes an euid, the request acts as the effective user while getRealUid() returns the key owner."
1285
1571
  }
1286
1572
  },
1287
1573
  "schemas": {