@sasjs/api 0.0.0-stage → 0.2.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.
Files changed (49) hide show
  1. package/LICENCE.md +21 -0
  2. package/README.md +87 -2
  3. package/build/browser.js +2469 -0
  4. package/build/cjs/corpus/drive.js +288 -0
  5. package/build/cjs/corpus/runner.js +35 -0
  6. package/build/cjs/drive/memory-store.js +126 -0
  7. package/build/cjs/drive/paths.js +82 -0
  8. package/build/cjs/drive/service.js +143 -0
  9. package/build/cjs/host/dispatch.js +102 -0
  10. package/build/cjs/index.js +58 -0
  11. package/build/cjs/routes/generated.js +1603 -0
  12. package/build/cjs/routes/index.js +111 -0
  13. package/build/cjs/routes/overlay.js +75 -0
  14. package/build/cjs/types.js +35 -0
  15. package/build/esm/corpus/drive.d.ts +33 -0
  16. package/build/esm/corpus/drive.d.ts.map +1 -0
  17. package/build/esm/corpus/drive.js +285 -0
  18. package/build/esm/corpus/runner.d.ts +27 -0
  19. package/build/esm/corpus/runner.d.ts.map +1 -0
  20. package/build/esm/corpus/runner.js +30 -0
  21. package/build/esm/drive/memory-store.d.ts +37 -0
  22. package/build/esm/drive/memory-store.d.ts.map +1 -0
  23. package/build/esm/drive/memory-store.js +122 -0
  24. package/build/esm/drive/paths.d.ts +49 -0
  25. package/build/esm/drive/paths.d.ts.map +1 -0
  26. package/build/esm/drive/paths.js +73 -0
  27. package/build/esm/drive/service.d.ts +42 -0
  28. package/build/esm/drive/service.d.ts.map +1 -0
  29. package/build/esm/drive/service.js +139 -0
  30. package/build/esm/host/dispatch.d.ts +24 -0
  31. package/build/esm/host/dispatch.d.ts.map +1 -0
  32. package/build/esm/host/dispatch.js +98 -0
  33. package/build/esm/index.d.ts +31 -0
  34. package/build/esm/index.d.ts.map +1 -0
  35. package/build/esm/index.js +24 -0
  36. package/build/esm/package.json +3 -0
  37. package/build/esm/routes/generated.d.ts +14 -0
  38. package/build/esm/routes/generated.d.ts.map +1 -0
  39. package/build/esm/routes/generated.js +1600 -0
  40. package/build/esm/routes/index.d.ts +18 -0
  41. package/build/esm/routes/index.d.ts.map +1 -0
  42. package/build/esm/routes/index.js +106 -0
  43. package/build/esm/routes/overlay.d.ts +40 -0
  44. package/build/esm/routes/overlay.d.ts.map +1 -0
  45. package/build/esm/routes/overlay.js +72 -0
  46. package/build/esm/types.d.ts +110 -0
  47. package/build/esm/types.d.ts.map +1 -0
  48. package/build/esm/types.js +30 -0
  49. package/package.json +55 -4
@@ -0,0 +1,1600 @@
1
+ export const GENERATED_ROUTES = [
2
+ {
3
+ id: 'GET /',
4
+ method: 'GET',
5
+ path: '/',
6
+ tag: 'Web',
7
+ summary: 'Serve the web interface',
8
+ params: [],
9
+ requestBodies: [],
10
+ responses: [
11
+ {
12
+ status: 200,
13
+ description: 'Ok'
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ id: 'GET /SASjsApi/admin/diagnostics',
19
+ method: 'GET',
20
+ path: '/SASjsApi/admin/diagnostics',
21
+ tag: 'Admin',
22
+ summary: 'Diagnostics: version, uptime, memory, disk usage',
23
+ params: [],
24
+ requestBodies: [],
25
+ responses: [
26
+ {
27
+ status: 200,
28
+ description: 'Ok'
29
+ }
30
+ ]
31
+ },
32
+ {
33
+ id: 'GET /SASjsApi/admin/logs',
34
+ method: 'GET',
35
+ path: '/SASjsApi/admin/logs',
36
+ tag: 'Admin',
37
+ summary: "List the server's log files",
38
+ params: [],
39
+ requestBodies: [],
40
+ responses: [
41
+ {
42
+ status: 200,
43
+ description: 'Ok'
44
+ }
45
+ ]
46
+ },
47
+ {
48
+ id: 'GET /SASjsApi/admin/logs/{fileName}',
49
+ method: 'GET',
50
+ path: '/SASjsApi/admin/logs/{fileName}',
51
+ tag: 'Admin',
52
+ summary: 'Read the tail of a log file',
53
+ params: [
54
+ {
55
+ name: 'fileName',
56
+ in: 'path',
57
+ required: true,
58
+ type: 'string'
59
+ },
60
+ {
61
+ name: 'lines',
62
+ in: 'query',
63
+ required: false,
64
+ type: 'number'
65
+ }
66
+ ],
67
+ requestBodies: [],
68
+ responses: [
69
+ {
70
+ status: 200,
71
+ description: 'Ok'
72
+ }
73
+ ]
74
+ },
75
+ {
76
+ id: 'POST /SASjsApi/auth/logout',
77
+ method: 'POST',
78
+ path: '/SASjsApi/auth/logout',
79
+ tag: 'Auth',
80
+ summary: 'Revoke the current tokens',
81
+ params: [],
82
+ requestBodies: [],
83
+ responses: [
84
+ {
85
+ status: 204,
86
+ description: 'No content'
87
+ }
88
+ ]
89
+ },
90
+ {
91
+ id: 'POST /SASjsApi/auth/refresh',
92
+ method: 'POST',
93
+ path: '/SASjsApi/auth/refresh',
94
+ tag: 'Auth',
95
+ summary: 'Refresh the access and refresh tokens',
96
+ params: [],
97
+ requestBodies: [],
98
+ responses: [
99
+ {
100
+ status: 200,
101
+ description: 'Ok'
102
+ }
103
+ ]
104
+ },
105
+ {
106
+ id: 'POST /SASjsApi/auth/token',
107
+ method: 'POST',
108
+ path: '/SASjsApi/auth/token',
109
+ tag: 'Auth',
110
+ summary: 'Exchange an authorization code for tokens',
111
+ params: [
112
+ {
113
+ name: 'clientId',
114
+ in: 'body',
115
+ required: true,
116
+ type: 'string'
117
+ },
118
+ {
119
+ name: 'code',
120
+ in: 'body',
121
+ required: true,
122
+ type: 'string'
123
+ }
124
+ ],
125
+ requestBodies: ['application/json'],
126
+ responses: [
127
+ {
128
+ status: 200,
129
+ description: 'Ok'
130
+ }
131
+ ]
132
+ },
133
+ {
134
+ id: 'PATCH /SASjsApi/auth/updatePassword',
135
+ method: 'PATCH',
136
+ path: '/SASjsApi/auth/updatePassword',
137
+ tag: 'Auth',
138
+ summary: "Change the current user's password",
139
+ params: [
140
+ {
141
+ name: 'currentPassword',
142
+ in: 'body',
143
+ required: true,
144
+ type: 'string'
145
+ },
146
+ {
147
+ name: 'newPassword',
148
+ in: 'body',
149
+ required: true,
150
+ type: 'string'
151
+ }
152
+ ],
153
+ requestBodies: ['application/json'],
154
+ responses: [
155
+ {
156
+ status: 204,
157
+ description: 'No content'
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ id: 'GET /SASjsApi/authConfig',
163
+ method: 'GET',
164
+ path: '/SASjsApi/authConfig',
165
+ tag: 'Auth Config',
166
+ summary: 'Get the configured authentication providers',
167
+ params: [],
168
+ requestBodies: [],
169
+ responses: [
170
+ {
171
+ status: 200,
172
+ description: 'Ok'
173
+ }
174
+ ]
175
+ },
176
+ {
177
+ id: 'POST /SASjsApi/authConfig/synchroniseWithLDAP',
178
+ method: 'POST',
179
+ path: '/SASjsApi/authConfig/synchroniseWithLDAP',
180
+ tag: 'Auth Config',
181
+ summary: 'Import users and groups from LDAP',
182
+ params: [],
183
+ requestBodies: [],
184
+ responses: [
185
+ {
186
+ status: 200,
187
+ description: 'Ok'
188
+ }
189
+ ]
190
+ },
191
+ {
192
+ id: 'GET /SASjsApi/client',
193
+ method: 'GET',
194
+ path: '/SASjsApi/client',
195
+ tag: 'Client',
196
+ summary: 'List all clients',
197
+ params: [],
198
+ requestBodies: [],
199
+ responses: [
200
+ {
201
+ status: 200,
202
+ description: 'Ok'
203
+ }
204
+ ]
205
+ },
206
+ {
207
+ id: 'POST /SASjsApi/client',
208
+ method: 'POST',
209
+ path: '/SASjsApi/client',
210
+ tag: 'Client',
211
+ summary: 'Create a client',
212
+ params: [
213
+ {
214
+ name: 'clientId',
215
+ in: 'body',
216
+ required: true,
217
+ type: 'string'
218
+ },
219
+ {
220
+ name: 'clientSecret',
221
+ in: 'body',
222
+ required: true,
223
+ type: 'string'
224
+ },
225
+ {
226
+ name: 'accessTokenExpiration',
227
+ in: 'body',
228
+ required: false,
229
+ type: 'number'
230
+ },
231
+ {
232
+ name: 'refreshTokenExpiration',
233
+ in: 'body',
234
+ required: false,
235
+ type: 'number'
236
+ }
237
+ ],
238
+ requestBodies: ['application/json'],
239
+ responses: [
240
+ {
241
+ status: 200,
242
+ description: 'Ok'
243
+ }
244
+ ]
245
+ },
246
+ {
247
+ id: 'POST /SASjsApi/code/execute',
248
+ method: 'POST',
249
+ path: '/SASjsApi/code/execute',
250
+ tag: 'Code',
251
+ summary: 'Execute code and return its output',
252
+ params: [
253
+ {
254
+ name: 'code',
255
+ in: 'body',
256
+ required: true,
257
+ type: 'string'
258
+ },
259
+ {
260
+ name: 'runTime',
261
+ in: 'body',
262
+ required: true,
263
+ type: 'RunTimeType'
264
+ }
265
+ ],
266
+ requestBodies: ['application/json'],
267
+ responses: [
268
+ {
269
+ status: 200,
270
+ description: 'Ok'
271
+ }
272
+ ]
273
+ },
274
+ {
275
+ id: 'POST /SASjsApi/code/format',
276
+ method: 'POST',
277
+ path: '/SASjsApi/code/format',
278
+ tag: 'Code',
279
+ summary: 'Format SAS code and return the formatted text',
280
+ params: [
281
+ {
282
+ name: 'code',
283
+ in: 'body',
284
+ required: true,
285
+ type: 'string'
286
+ },
287
+ {
288
+ name: 'filePath',
289
+ in: 'body',
290
+ required: false,
291
+ type: 'string'
292
+ }
293
+ ],
294
+ requestBodies: ['application/json'],
295
+ responses: [
296
+ {
297
+ status: 200,
298
+ description: 'Ok'
299
+ }
300
+ ]
301
+ },
302
+ {
303
+ id: 'POST /SASjsApi/code/lint',
304
+ method: 'POST',
305
+ path: '/SASjsApi/code/lint',
306
+ tag: 'Code',
307
+ summary: 'Lint SAS code and return the diagnostics',
308
+ params: [
309
+ {
310
+ name: 'code',
311
+ in: 'body',
312
+ required: true,
313
+ type: 'string'
314
+ },
315
+ {
316
+ name: 'filePath',
317
+ in: 'body',
318
+ required: false,
319
+ type: 'string'
320
+ }
321
+ ],
322
+ requestBodies: ['application/json'],
323
+ responses: [
324
+ {
325
+ status: 200,
326
+ description: 'Ok'
327
+ }
328
+ ]
329
+ },
330
+ {
331
+ id: 'POST /SASjsApi/code/trigger',
332
+ method: 'POST',
333
+ path: '/SASjsApi/code/trigger',
334
+ tag: 'Code',
335
+ summary: 'Trigger code and return a session ID',
336
+ params: [
337
+ {
338
+ name: 'code',
339
+ in: 'body',
340
+ required: true,
341
+ type: 'string'
342
+ },
343
+ {
344
+ name: 'runTime',
345
+ in: 'body',
346
+ required: true,
347
+ type: 'RunTimeType'
348
+ },
349
+ {
350
+ name: 'expiresAfterMins',
351
+ in: 'body',
352
+ required: false,
353
+ type: 'number'
354
+ }
355
+ ],
356
+ requestBodies: ['application/json'],
357
+ responses: [
358
+ {
359
+ status: 200,
360
+ description: 'Ok'
361
+ }
362
+ ]
363
+ },
364
+ {
365
+ id: 'POST /SASjsApi/drive/deploy',
366
+ method: 'POST',
367
+ path: '/SASjsApi/drive/deploy',
368
+ tag: 'Drive',
369
+ summary: 'Deploy a file tree to SASjs Drive',
370
+ params: [
371
+ {
372
+ name: 'appLoc',
373
+ in: 'body',
374
+ required: true,
375
+ type: 'string'
376
+ },
377
+ {
378
+ name: 'streamWebFolder',
379
+ in: 'body',
380
+ required: false,
381
+ type: 'string'
382
+ },
383
+ {
384
+ name: 'fileTree',
385
+ in: 'body',
386
+ required: true,
387
+ type: 'FileTree'
388
+ }
389
+ ],
390
+ requestBodies: ['application/json'],
391
+ responses: [
392
+ {
393
+ status: 200,
394
+ description: 'Ok'
395
+ },
396
+ {
397
+ status: 400,
398
+ description: 'Invalid Format'
399
+ },
400
+ {
401
+ status: 500,
402
+ description: 'Execution Error'
403
+ }
404
+ ]
405
+ },
406
+ {
407
+ id: 'POST /SASjsApi/drive/deploy/upload',
408
+ method: 'POST',
409
+ path: '/SASjsApi/drive/deploy/upload',
410
+ tag: 'Drive',
411
+ summary: 'Deploy an uploaded file to SASjs Drive',
412
+ params: [
413
+ {
414
+ name: 'file',
415
+ in: 'formData',
416
+ required: true,
417
+ type: 'string'
418
+ }
419
+ ],
420
+ requestBodies: ['multipart/form-data'],
421
+ responses: [
422
+ {
423
+ status: 200,
424
+ description: 'Ok'
425
+ },
426
+ {
427
+ status: 400,
428
+ description: 'Invalid Format'
429
+ },
430
+ {
431
+ status: 500,
432
+ description: 'Execution Error'
433
+ }
434
+ ]
435
+ },
436
+ {
437
+ id: 'DELETE /SASjsApi/drive/file',
438
+ method: 'DELETE',
439
+ path: '/SASjsApi/drive/file',
440
+ tag: 'Drive',
441
+ summary: 'Delete a file from SASjs Drive',
442
+ params: [
443
+ {
444
+ name: '_filePath',
445
+ in: 'query',
446
+ required: true,
447
+ type: 'string'
448
+ }
449
+ ],
450
+ requestBodies: [],
451
+ responses: [
452
+ {
453
+ status: 200,
454
+ description: 'Ok'
455
+ },
456
+ {
457
+ status: 400,
458
+ description: "Can't delete file outside drive"
459
+ },
460
+ {
461
+ status: 404,
462
+ description: "File doesn't exist"
463
+ }
464
+ ]
465
+ },
466
+ {
467
+ id: 'GET /SASjsApi/drive/file',
468
+ method: 'GET',
469
+ path: '/SASjsApi/drive/file',
470
+ tag: 'Drive',
471
+ summary: 'Get a file from SASjs Drive',
472
+ params: [
473
+ {
474
+ name: '_filePath',
475
+ in: 'query',
476
+ required: true,
477
+ type: 'string'
478
+ }
479
+ ],
480
+ requestBodies: [],
481
+ responses: [
482
+ {
483
+ status: 200,
484
+ description: 'The contents of the file'
485
+ },
486
+ {
487
+ status: 400,
488
+ description: "Can't get file outside drive"
489
+ },
490
+ {
491
+ status: 404,
492
+ description: "File doesn't exist"
493
+ }
494
+ ]
495
+ },
496
+ {
497
+ id: 'PATCH /SASjsApi/drive/file',
498
+ method: 'PATCH',
499
+ path: '/SASjsApi/drive/file',
500
+ tag: 'Drive',
501
+ summary: 'Replace a file in SASjs Drive',
502
+ params: [
503
+ {
504
+ name: '_filePath',
505
+ in: 'query',
506
+ required: false,
507
+ type: 'string'
508
+ },
509
+ {
510
+ name: 'file',
511
+ in: 'formData',
512
+ required: true,
513
+ type: 'string'
514
+ },
515
+ {
516
+ name: 'filePath',
517
+ in: 'formData',
518
+ required: false,
519
+ type: 'string'
520
+ }
521
+ ],
522
+ requestBodies: ['multipart/form-data'],
523
+ responses: [
524
+ {
525
+ status: 200,
526
+ description: 'Ok'
527
+ },
528
+ {
529
+ status: 400,
530
+ description: "Can't modify file outside drive"
531
+ },
532
+ {
533
+ status: 404,
534
+ description: "File doesn't exist"
535
+ }
536
+ ]
537
+ },
538
+ {
539
+ id: 'POST /SASjsApi/drive/file',
540
+ method: 'POST',
541
+ path: '/SASjsApi/drive/file',
542
+ tag: 'Drive',
543
+ summary: 'Create a file in SASjs Drive',
544
+ params: [
545
+ {
546
+ name: '_filePath',
547
+ in: 'query',
548
+ required: false,
549
+ type: 'string'
550
+ },
551
+ {
552
+ name: 'file',
553
+ in: 'formData',
554
+ required: true,
555
+ type: 'string'
556
+ },
557
+ {
558
+ name: 'filePath',
559
+ in: 'formData',
560
+ required: false,
561
+ type: 'string'
562
+ }
563
+ ],
564
+ requestBodies: ['multipart/form-data'],
565
+ responses: [
566
+ {
567
+ status: 200,
568
+ description: 'Ok'
569
+ },
570
+ {
571
+ status: 400,
572
+ description: "Can't put file outside drive"
573
+ },
574
+ {
575
+ status: 409,
576
+ description: 'File already exists'
577
+ }
578
+ ]
579
+ },
580
+ {
581
+ id: 'GET /SASjsApi/drive/filetree',
582
+ method: 'GET',
583
+ path: '/SASjsApi/drive/filetree',
584
+ tag: 'Drive',
585
+ summary: 'Get the SASjs Drive file tree, or one folder of it',
586
+ params: [
587
+ {
588
+ name: '_folderPath',
589
+ in: 'query',
590
+ required: false,
591
+ type: 'string'
592
+ }
593
+ ],
594
+ requestBodies: [],
595
+ responses: [
596
+ {
597
+ status: 200,
598
+ description: 'Ok'
599
+ }
600
+ ]
601
+ },
602
+ {
603
+ id: 'DELETE /SASjsApi/drive/folder',
604
+ method: 'DELETE',
605
+ path: '/SASjsApi/drive/folder',
606
+ tag: 'Drive',
607
+ summary: 'Delete a folder from SASjs Drive',
608
+ params: [
609
+ {
610
+ name: '_folderPath',
611
+ in: 'query',
612
+ required: true,
613
+ type: 'string'
614
+ }
615
+ ],
616
+ requestBodies: [],
617
+ responses: [
618
+ {
619
+ status: 200,
620
+ description: 'Ok'
621
+ },
622
+ {
623
+ status: 400,
624
+ description: "Can't delete folder outside drive"
625
+ },
626
+ {
627
+ status: 404,
628
+ description: "Folder doesn't exist"
629
+ }
630
+ ]
631
+ },
632
+ {
633
+ id: 'GET /SASjsApi/drive/folder',
634
+ method: 'GET',
635
+ path: '/SASjsApi/drive/folder',
636
+ tag: 'Drive',
637
+ summary: 'List a folder in SASjs Drive',
638
+ params: [
639
+ {
640
+ name: '_folderPath',
641
+ in: 'query',
642
+ required: false,
643
+ type: 'string'
644
+ }
645
+ ],
646
+ requestBodies: [],
647
+ responses: [
648
+ {
649
+ status: 200,
650
+ description: 'Ok'
651
+ },
652
+ {
653
+ status: 400,
654
+ description: "Can't get folder outside drive"
655
+ },
656
+ {
657
+ status: 404,
658
+ description: "Folder doesn't exist"
659
+ }
660
+ ]
661
+ },
662
+ {
663
+ id: 'POST /SASjsApi/drive/folder',
664
+ method: 'POST',
665
+ path: '/SASjsApi/drive/folder',
666
+ tag: 'Drive',
667
+ summary: 'Create a folder in SASjs Drive',
668
+ params: [
669
+ {
670
+ name: 'folderPath',
671
+ in: 'body',
672
+ required: true,
673
+ type: 'string'
674
+ }
675
+ ],
676
+ requestBodies: ['application/json'],
677
+ responses: [
678
+ {
679
+ status: 200,
680
+ description: 'Ok'
681
+ },
682
+ {
683
+ status: 400,
684
+ description: "Can't put folder outside drive"
685
+ },
686
+ {
687
+ status: 409,
688
+ description: 'Folder already exists'
689
+ }
690
+ ]
691
+ },
692
+ {
693
+ id: 'POST /SASjsApi/drive/rename',
694
+ method: 'POST',
695
+ path: '/SASjsApi/drive/rename',
696
+ tag: 'Drive',
697
+ summary: 'Rename or move a file or folder in SASjs Drive',
698
+ params: [
699
+ {
700
+ name: 'oldPath',
701
+ in: 'body',
702
+ required: true,
703
+ type: 'string'
704
+ },
705
+ {
706
+ name: 'newPath',
707
+ in: 'body',
708
+ required: true,
709
+ type: 'string'
710
+ }
711
+ ],
712
+ requestBodies: ['application/json'],
713
+ responses: [
714
+ {
715
+ status: 200,
716
+ description: 'Ok'
717
+ },
718
+ {
719
+ status: 400,
720
+ description: "Can't rename outside drive"
721
+ },
722
+ {
723
+ status: 404,
724
+ description: 'No file/folder found for provided path'
725
+ },
726
+ {
727
+ status: 409,
728
+ description: 'Something already exists at the new path'
729
+ }
730
+ ]
731
+ },
732
+ {
733
+ id: 'GET /SASjsApi/group',
734
+ method: 'GET',
735
+ path: '/SASjsApi/group',
736
+ tag: 'Group',
737
+ summary: 'List all groups',
738
+ params: [],
739
+ requestBodies: [],
740
+ responses: [
741
+ {
742
+ status: 200,
743
+ description: 'Ok'
744
+ }
745
+ ]
746
+ },
747
+ {
748
+ id: 'POST /SASjsApi/group',
749
+ method: 'POST',
750
+ path: '/SASjsApi/group',
751
+ tag: 'Group',
752
+ summary: 'Create a group',
753
+ params: [
754
+ {
755
+ name: 'name',
756
+ in: 'body',
757
+ required: true,
758
+ type: 'string'
759
+ },
760
+ {
761
+ name: 'description',
762
+ in: 'body',
763
+ required: true,
764
+ type: 'string'
765
+ },
766
+ {
767
+ name: 'isActive',
768
+ in: 'body',
769
+ required: false,
770
+ type: 'boolean'
771
+ }
772
+ ],
773
+ requestBodies: ['application/json'],
774
+ responses: [
775
+ {
776
+ status: 200,
777
+ description: 'Ok'
778
+ }
779
+ ]
780
+ },
781
+ {
782
+ id: 'DELETE /SASjsApi/group/{groupUid}/{userUid}',
783
+ method: 'DELETE',
784
+ path: '/SASjsApi/group/{groupUid}/{userUid}',
785
+ tag: 'Group',
786
+ summary: 'Remove a user from a group',
787
+ params: [
788
+ {
789
+ name: 'groupUid',
790
+ in: 'path',
791
+ required: true,
792
+ type: 'string'
793
+ },
794
+ {
795
+ name: 'userUid',
796
+ in: 'path',
797
+ required: true,
798
+ type: 'string'
799
+ }
800
+ ],
801
+ requestBodies: [],
802
+ responses: [
803
+ {
804
+ status: 200,
805
+ description: 'Ok'
806
+ }
807
+ ]
808
+ },
809
+ {
810
+ id: 'POST /SASjsApi/group/{groupUid}/{userUid}',
811
+ method: 'POST',
812
+ path: '/SASjsApi/group/{groupUid}/{userUid}',
813
+ tag: 'Group',
814
+ summary: 'Add a user to a group',
815
+ params: [
816
+ {
817
+ name: 'groupUid',
818
+ in: 'path',
819
+ required: true,
820
+ type: 'string'
821
+ },
822
+ {
823
+ name: 'userUid',
824
+ in: 'path',
825
+ required: true,
826
+ type: 'string'
827
+ }
828
+ ],
829
+ requestBodies: [],
830
+ responses: [
831
+ {
832
+ status: 200,
833
+ description: 'Ok'
834
+ }
835
+ ]
836
+ },
837
+ {
838
+ id: 'DELETE /SASjsApi/group/{uid}',
839
+ method: 'DELETE',
840
+ path: '/SASjsApi/group/{uid}',
841
+ tag: 'Group',
842
+ summary: 'Delete a group',
843
+ params: [
844
+ {
845
+ name: 'uid',
846
+ in: 'path',
847
+ required: true,
848
+ type: 'string'
849
+ }
850
+ ],
851
+ requestBodies: [],
852
+ responses: [
853
+ {
854
+ status: 200,
855
+ description: 'Ok'
856
+ }
857
+ ]
858
+ },
859
+ {
860
+ id: 'GET /SASjsApi/group/{uid}',
861
+ method: 'GET',
862
+ path: '/SASjsApi/group/{uid}',
863
+ tag: 'Group',
864
+ summary: 'Get a group by id',
865
+ params: [
866
+ {
867
+ name: 'uid',
868
+ in: 'path',
869
+ required: true,
870
+ type: 'string'
871
+ }
872
+ ],
873
+ requestBodies: [],
874
+ responses: [
875
+ {
876
+ status: 200,
877
+ description: 'Ok'
878
+ }
879
+ ]
880
+ },
881
+ {
882
+ id: 'GET /SASjsApi/group/by/groupname/{name}',
883
+ method: 'GET',
884
+ path: '/SASjsApi/group/by/groupname/{name}',
885
+ tag: 'Group',
886
+ summary: 'Get a group by name',
887
+ params: [
888
+ {
889
+ name: 'name',
890
+ in: 'path',
891
+ required: true,
892
+ type: 'string'
893
+ }
894
+ ],
895
+ requestBodies: [],
896
+ responses: [
897
+ {
898
+ status: 200,
899
+ description: 'Ok'
900
+ }
901
+ ]
902
+ },
903
+ {
904
+ id: 'GET /SASjsApi/info',
905
+ method: 'GET',
906
+ path: '/SASjsApi/info',
907
+ tag: 'Info',
908
+ summary: 'Get public server information',
909
+ params: [],
910
+ requestBodies: [],
911
+ responses: [
912
+ {
913
+ status: 200,
914
+ description: 'Ok'
915
+ }
916
+ ]
917
+ },
918
+ {
919
+ id: 'GET /SASjsApi/info/authorizedRoutes',
920
+ method: 'GET',
921
+ path: '/SASjsApi/info/authorizedRoutes',
922
+ tag: 'Info',
923
+ summary: 'List the routes that accept permissions',
924
+ params: [],
925
+ requestBodies: [],
926
+ responses: [
927
+ {
928
+ status: 200,
929
+ description: 'Ok'
930
+ }
931
+ ]
932
+ },
933
+ {
934
+ id: 'GET /SASjsApi/info/myAuthorizedRoutes',
935
+ method: 'GET',
936
+ path: '/SASjsApi/info/myAuthorizedRoutes',
937
+ tag: 'Info',
938
+ summary: 'List the routes this caller may use',
939
+ params: [],
940
+ requestBodies: [],
941
+ responses: [
942
+ {
943
+ status: 200,
944
+ description: 'Ok'
945
+ }
946
+ ]
947
+ },
948
+ {
949
+ id: 'GET /SASjsApi/permission',
950
+ method: 'GET',
951
+ path: '/SASjsApi/permission',
952
+ tag: 'Permission',
953
+ summary: 'List the permission rules for the current user',
954
+ params: [],
955
+ requestBodies: [],
956
+ responses: [
957
+ {
958
+ status: 200,
959
+ description: 'Ok'
960
+ }
961
+ ]
962
+ },
963
+ {
964
+ id: 'POST /SASjsApi/permission',
965
+ method: 'POST',
966
+ path: '/SASjsApi/permission',
967
+ tag: 'Permission',
968
+ summary: 'Create a permission rule',
969
+ params: [
970
+ {
971
+ name: 'path',
972
+ in: 'body',
973
+ required: true,
974
+ type: 'string'
975
+ },
976
+ {
977
+ name: 'type',
978
+ in: 'body',
979
+ required: true,
980
+ type: 'PermissionType'
981
+ },
982
+ {
983
+ name: 'setting',
984
+ in: 'body',
985
+ required: true,
986
+ type: 'PermissionSettingForRoute'
987
+ },
988
+ {
989
+ name: 'principalType',
990
+ in: 'body',
991
+ required: true,
992
+ type: 'PrincipalType'
993
+ },
994
+ {
995
+ name: 'principalId',
996
+ in: 'body',
997
+ required: true,
998
+ type: 'string'
999
+ }
1000
+ ],
1001
+ requestBodies: ['application/json'],
1002
+ responses: [
1003
+ {
1004
+ status: 200,
1005
+ description: 'Ok'
1006
+ }
1007
+ ]
1008
+ },
1009
+ {
1010
+ id: 'DELETE /SASjsApi/permission/{uid}',
1011
+ method: 'DELETE',
1012
+ path: '/SASjsApi/permission/{uid}',
1013
+ tag: 'Permission',
1014
+ summary: 'Delete a permission rule',
1015
+ params: [
1016
+ {
1017
+ name: 'uid',
1018
+ in: 'path',
1019
+ required: true,
1020
+ type: 'string'
1021
+ }
1022
+ ],
1023
+ requestBodies: [],
1024
+ responses: [
1025
+ {
1026
+ status: 204,
1027
+ description: 'No content'
1028
+ }
1029
+ ]
1030
+ },
1031
+ {
1032
+ id: 'PATCH /SASjsApi/permission/{uid}',
1033
+ method: 'PATCH',
1034
+ path: '/SASjsApi/permission/{uid}',
1035
+ tag: 'Permission',
1036
+ summary: 'Update a permission rule',
1037
+ params: [
1038
+ {
1039
+ name: 'uid',
1040
+ in: 'path',
1041
+ required: true,
1042
+ type: 'string'
1043
+ },
1044
+ {
1045
+ name: 'setting',
1046
+ in: 'body',
1047
+ required: true,
1048
+ type: 'PermissionSettingForRoute'
1049
+ }
1050
+ ],
1051
+ requestBodies: ['application/json'],
1052
+ responses: [
1053
+ {
1054
+ status: 200,
1055
+ description: 'Ok'
1056
+ }
1057
+ ]
1058
+ },
1059
+ {
1060
+ id: 'GET /SASjsApi/session',
1061
+ method: 'GET',
1062
+ path: '/SASjsApi/session',
1063
+ tag: 'Session',
1064
+ summary: 'Get the current session',
1065
+ params: [],
1066
+ requestBodies: [],
1067
+ responses: [
1068
+ {
1069
+ status: 200,
1070
+ description: 'Ok'
1071
+ }
1072
+ ]
1073
+ },
1074
+ {
1075
+ id: 'GET /SASjsApi/session/{sessionId}',
1076
+ method: 'GET',
1077
+ path: '/SASjsApi/session/{sessionId}',
1078
+ tag: 'Session',
1079
+ summary: 'Get a triggered session',
1080
+ params: [
1081
+ {
1082
+ name: 'sessionId',
1083
+ in: 'path',
1084
+ required: true,
1085
+ type: 'string'
1086
+ }
1087
+ ],
1088
+ requestBodies: [],
1089
+ responses: [
1090
+ {
1091
+ status: 200,
1092
+ description: 'Ok'
1093
+ }
1094
+ ]
1095
+ },
1096
+ {
1097
+ id: 'GET /SASjsApi/session/{sessionId}/log',
1098
+ method: 'GET',
1099
+ path: '/SASjsApi/session/{sessionId}/log',
1100
+ tag: 'Session',
1101
+ summary: 'Get the log of a triggered session',
1102
+ params: [
1103
+ {
1104
+ name: 'sessionId',
1105
+ in: 'path',
1106
+ required: true,
1107
+ type: 'string'
1108
+ }
1109
+ ],
1110
+ requestBodies: [],
1111
+ responses: [
1112
+ {
1113
+ status: 200,
1114
+ description: 'Ok'
1115
+ }
1116
+ ]
1117
+ },
1118
+ {
1119
+ id: 'GET /SASjsApi/session/{sessionId}/output',
1120
+ method: 'GET',
1121
+ path: '/SASjsApi/session/{sessionId}/output',
1122
+ tag: 'Session',
1123
+ summary: 'Get the output of a triggered session',
1124
+ params: [
1125
+ {
1126
+ name: 'sessionId',
1127
+ in: 'path',
1128
+ required: true,
1129
+ type: 'string'
1130
+ }
1131
+ ],
1132
+ requestBodies: [],
1133
+ responses: [
1134
+ {
1135
+ status: 200,
1136
+ description: 'Ok'
1137
+ }
1138
+ ]
1139
+ },
1140
+ {
1141
+ id: 'GET /SASjsApi/session/{sessionId}/state',
1142
+ method: 'GET',
1143
+ path: '/SASjsApi/session/{sessionId}/state',
1144
+ tag: 'Session',
1145
+ summary: 'Get the state of a session',
1146
+ params: [
1147
+ {
1148
+ name: 'sessionId',
1149
+ in: 'path',
1150
+ required: true,
1151
+ type: 'string'
1152
+ }
1153
+ ],
1154
+ requestBodies: [],
1155
+ responses: [
1156
+ {
1157
+ status: 200,
1158
+ description: 'Ok'
1159
+ }
1160
+ ]
1161
+ },
1162
+ {
1163
+ id: 'GET /SASjsApi/stp/execute',
1164
+ method: 'GET',
1165
+ path: '/SASjsApi/stp/execute',
1166
+ tag: 'STP',
1167
+ summary: 'Execute a stored program',
1168
+ params: [
1169
+ {
1170
+ name: '_program',
1171
+ in: 'query',
1172
+ required: true,
1173
+ type: 'string'
1174
+ },
1175
+ {
1176
+ name: '_debug',
1177
+ in: 'query',
1178
+ required: false,
1179
+ type: 'number'
1180
+ }
1181
+ ],
1182
+ requestBodies: [],
1183
+ responses: [
1184
+ {
1185
+ status: 200,
1186
+ description: 'Ok'
1187
+ }
1188
+ ]
1189
+ },
1190
+ {
1191
+ id: 'POST /SASjsApi/stp/execute',
1192
+ method: 'POST',
1193
+ path: '/SASjsApi/stp/execute',
1194
+ tag: 'STP',
1195
+ summary: 'Execute a stored program',
1196
+ params: [
1197
+ {
1198
+ name: '_program',
1199
+ in: 'query',
1200
+ required: false,
1201
+ type: 'string'
1202
+ },
1203
+ {
1204
+ name: '_program',
1205
+ in: 'body',
1206
+ required: false,
1207
+ type: 'string'
1208
+ }
1209
+ ],
1210
+ requestBodies: ['application/json'],
1211
+ responses: [
1212
+ {
1213
+ status: 200,
1214
+ description: 'Ok'
1215
+ }
1216
+ ]
1217
+ },
1218
+ {
1219
+ id: 'POST /SASjsApi/stp/trigger',
1220
+ method: 'POST',
1221
+ path: '/SASjsApi/stp/trigger',
1222
+ tag: 'STP',
1223
+ summary: 'Trigger a stored program and return a session ID',
1224
+ params: [
1225
+ {
1226
+ name: '_program',
1227
+ in: 'query',
1228
+ required: true,
1229
+ type: 'string'
1230
+ },
1231
+ {
1232
+ name: '_debug',
1233
+ in: 'query',
1234
+ required: false,
1235
+ type: 'number'
1236
+ },
1237
+ {
1238
+ name: 'expiresAfterMins',
1239
+ in: 'query',
1240
+ required: false,
1241
+ type: 'number'
1242
+ }
1243
+ ],
1244
+ requestBodies: [],
1245
+ responses: [
1246
+ {
1247
+ status: 200,
1248
+ description: 'Ok'
1249
+ }
1250
+ ]
1251
+ },
1252
+ {
1253
+ id: 'GET /SASjsApi/user',
1254
+ method: 'GET',
1255
+ path: '/SASjsApi/user',
1256
+ tag: 'User',
1257
+ summary: 'List all users',
1258
+ params: [],
1259
+ requestBodies: [],
1260
+ responses: [
1261
+ {
1262
+ status: 200,
1263
+ description: 'Ok'
1264
+ }
1265
+ ]
1266
+ },
1267
+ {
1268
+ id: 'POST /SASjsApi/user',
1269
+ method: 'POST',
1270
+ path: '/SASjsApi/user',
1271
+ tag: 'User',
1272
+ summary: 'Create a user',
1273
+ params: [
1274
+ {
1275
+ name: 'displayName',
1276
+ in: 'body',
1277
+ required: true,
1278
+ type: 'string'
1279
+ },
1280
+ {
1281
+ name: 'username',
1282
+ in: 'body',
1283
+ required: true,
1284
+ type: 'string'
1285
+ },
1286
+ {
1287
+ name: 'password',
1288
+ in: 'body',
1289
+ required: true,
1290
+ type: 'string'
1291
+ },
1292
+ {
1293
+ name: 'isAdmin',
1294
+ in: 'body',
1295
+ required: false,
1296
+ type: 'boolean'
1297
+ },
1298
+ {
1299
+ name: 'isActive',
1300
+ in: 'body',
1301
+ required: false,
1302
+ type: 'boolean'
1303
+ },
1304
+ {
1305
+ name: 'autoExec',
1306
+ in: 'body',
1307
+ required: false,
1308
+ type: 'string'
1309
+ }
1310
+ ],
1311
+ requestBodies: ['application/json'],
1312
+ responses: [
1313
+ {
1314
+ status: 200,
1315
+ description: 'Ok'
1316
+ }
1317
+ ]
1318
+ },
1319
+ {
1320
+ id: 'DELETE /SASjsApi/user/{uid}',
1321
+ method: 'DELETE',
1322
+ path: '/SASjsApi/user/{uid}',
1323
+ tag: 'User',
1324
+ summary: 'Delete a user by id',
1325
+ params: [
1326
+ {
1327
+ name: 'uid',
1328
+ in: 'path',
1329
+ required: true,
1330
+ type: 'string'
1331
+ },
1332
+ {
1333
+ name: 'password',
1334
+ in: 'body',
1335
+ required: false,
1336
+ type: 'string'
1337
+ }
1338
+ ],
1339
+ requestBodies: ['application/json'],
1340
+ responses: [
1341
+ {
1342
+ status: 204,
1343
+ description: 'No content'
1344
+ }
1345
+ ]
1346
+ },
1347
+ {
1348
+ id: 'GET /SASjsApi/user/{uid}',
1349
+ method: 'GET',
1350
+ path: '/SASjsApi/user/{uid}',
1351
+ tag: 'User',
1352
+ summary: 'Get a user by id',
1353
+ params: [
1354
+ {
1355
+ name: 'uid',
1356
+ in: 'path',
1357
+ required: true,
1358
+ type: 'string'
1359
+ }
1360
+ ],
1361
+ requestBodies: [],
1362
+ responses: [
1363
+ {
1364
+ status: 200,
1365
+ description: 'Ok'
1366
+ }
1367
+ ]
1368
+ },
1369
+ {
1370
+ id: 'PATCH /SASjsApi/user/{uid}',
1371
+ method: 'PATCH',
1372
+ path: '/SASjsApi/user/{uid}',
1373
+ tag: 'User',
1374
+ summary: 'Update a user by id',
1375
+ params: [
1376
+ {
1377
+ name: 'uid',
1378
+ in: 'path',
1379
+ required: true,
1380
+ type: 'string'
1381
+ },
1382
+ {
1383
+ name: 'displayName',
1384
+ in: 'body',
1385
+ required: true,
1386
+ type: 'string'
1387
+ },
1388
+ {
1389
+ name: 'username',
1390
+ in: 'body',
1391
+ required: true,
1392
+ type: 'string'
1393
+ },
1394
+ {
1395
+ name: 'password',
1396
+ in: 'body',
1397
+ required: true,
1398
+ type: 'string'
1399
+ },
1400
+ {
1401
+ name: 'isAdmin',
1402
+ in: 'body',
1403
+ required: false,
1404
+ type: 'boolean'
1405
+ },
1406
+ {
1407
+ name: 'isActive',
1408
+ in: 'body',
1409
+ required: false,
1410
+ type: 'boolean'
1411
+ },
1412
+ {
1413
+ name: 'autoExec',
1414
+ in: 'body',
1415
+ required: false,
1416
+ type: 'string'
1417
+ }
1418
+ ],
1419
+ requestBodies: ['application/json'],
1420
+ responses: [
1421
+ {
1422
+ status: 200,
1423
+ description: 'Ok'
1424
+ }
1425
+ ]
1426
+ },
1427
+ {
1428
+ id: 'DELETE /SASjsApi/user/by/username/{username}',
1429
+ method: 'DELETE',
1430
+ path: '/SASjsApi/user/by/username/{username}',
1431
+ tag: 'User',
1432
+ summary: 'Delete a user by username',
1433
+ params: [
1434
+ {
1435
+ name: 'username',
1436
+ in: 'path',
1437
+ required: true,
1438
+ type: 'string'
1439
+ },
1440
+ {
1441
+ name: 'password',
1442
+ in: 'body',
1443
+ required: false,
1444
+ type: 'string'
1445
+ }
1446
+ ],
1447
+ requestBodies: ['application/json'],
1448
+ responses: [
1449
+ {
1450
+ status: 204,
1451
+ description: 'No content'
1452
+ }
1453
+ ]
1454
+ },
1455
+ {
1456
+ id: 'GET /SASjsApi/user/by/username/{username}',
1457
+ method: 'GET',
1458
+ path: '/SASjsApi/user/by/username/{username}',
1459
+ tag: 'User',
1460
+ summary: 'Get a user by username',
1461
+ params: [
1462
+ {
1463
+ name: 'username',
1464
+ in: 'path',
1465
+ required: true,
1466
+ type: 'string'
1467
+ }
1468
+ ],
1469
+ requestBodies: [],
1470
+ responses: [
1471
+ {
1472
+ status: 200,
1473
+ description: 'Ok'
1474
+ }
1475
+ ]
1476
+ },
1477
+ {
1478
+ id: 'PATCH /SASjsApi/user/by/username/{username}',
1479
+ method: 'PATCH',
1480
+ path: '/SASjsApi/user/by/username/{username}',
1481
+ tag: 'User',
1482
+ summary: 'Update a user by username',
1483
+ params: [
1484
+ {
1485
+ name: 'username',
1486
+ in: 'path',
1487
+ required: true,
1488
+ type: 'string'
1489
+ },
1490
+ {
1491
+ name: 'displayName',
1492
+ in: 'body',
1493
+ required: true,
1494
+ type: 'string'
1495
+ },
1496
+ {
1497
+ name: 'username',
1498
+ in: 'body',
1499
+ required: true,
1500
+ type: 'string'
1501
+ },
1502
+ {
1503
+ name: 'password',
1504
+ in: 'body',
1505
+ required: true,
1506
+ type: 'string'
1507
+ },
1508
+ {
1509
+ name: 'isAdmin',
1510
+ in: 'body',
1511
+ required: false,
1512
+ type: 'boolean'
1513
+ },
1514
+ {
1515
+ name: 'isActive',
1516
+ in: 'body',
1517
+ required: false,
1518
+ type: 'boolean'
1519
+ },
1520
+ {
1521
+ name: 'autoExec',
1522
+ in: 'body',
1523
+ required: false,
1524
+ type: 'string'
1525
+ }
1526
+ ],
1527
+ requestBodies: ['application/json'],
1528
+ responses: [
1529
+ {
1530
+ status: 200,
1531
+ description: 'Ok'
1532
+ }
1533
+ ]
1534
+ },
1535
+ {
1536
+ id: 'POST /SASLogon/authorize',
1537
+ method: 'POST',
1538
+ path: '/SASLogon/authorize',
1539
+ tag: 'Web',
1540
+ summary: 'Issue an authorization code',
1541
+ params: [
1542
+ {
1543
+ name: 'clientId',
1544
+ in: 'body',
1545
+ required: true,
1546
+ type: 'string'
1547
+ }
1548
+ ],
1549
+ requestBodies: ['application/json'],
1550
+ responses: [
1551
+ {
1552
+ status: 200,
1553
+ description: 'Ok'
1554
+ }
1555
+ ]
1556
+ },
1557
+ {
1558
+ id: 'POST /SASLogon/login',
1559
+ method: 'POST',
1560
+ path: '/SASLogon/login',
1561
+ tag: 'Web',
1562
+ summary: 'Sign in with a username and password',
1563
+ params: [
1564
+ {
1565
+ name: 'username',
1566
+ in: 'body',
1567
+ required: true,
1568
+ type: 'string'
1569
+ },
1570
+ {
1571
+ name: 'password',
1572
+ in: 'body',
1573
+ required: true,
1574
+ type: 'string'
1575
+ }
1576
+ ],
1577
+ requestBodies: ['application/json'],
1578
+ responses: [
1579
+ {
1580
+ status: 200,
1581
+ description: 'Ok'
1582
+ }
1583
+ ]
1584
+ },
1585
+ {
1586
+ id: 'GET /SASLogon/logout',
1587
+ method: 'GET',
1588
+ path: '/SASLogon/logout',
1589
+ tag: 'Web',
1590
+ summary: 'Sign out',
1591
+ params: [],
1592
+ requestBodies: [],
1593
+ responses: [
1594
+ {
1595
+ status: 200,
1596
+ description: 'Ok'
1597
+ }
1598
+ ]
1599
+ }
1600
+ ];