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