mirror of
https://github.com/sasjs/server.git
synced 2026-01-03 13:10:04 +00:00
1489 lines
52 KiB
YAML
1489 lines
52 KiB
YAML
components:
|
|
examples: {}
|
|
headers: {}
|
|
parameters: {}
|
|
requestBodies: {}
|
|
responses: {}
|
|
schemas:
|
|
TokenResponse:
|
|
properties:
|
|
accessToken:
|
|
type: string
|
|
description: 'Access Token'
|
|
example: someRandomCryptoString
|
|
refreshToken:
|
|
type: string
|
|
description: 'Refresh Token'
|
|
example: someRandomCryptoString
|
|
required:
|
|
- accessToken
|
|
- refreshToken
|
|
type: object
|
|
additionalProperties: false
|
|
TokenPayload:
|
|
properties:
|
|
clientId:
|
|
type: string
|
|
description: 'Client ID'
|
|
example: clientID1
|
|
code:
|
|
type: string
|
|
description: 'Authorization code'
|
|
example: someRandomCryptoString
|
|
required:
|
|
- clientId
|
|
- code
|
|
type: object
|
|
additionalProperties: false
|
|
InfoJWT:
|
|
properties:
|
|
clientId:
|
|
type: string
|
|
userId:
|
|
type: number
|
|
format: double
|
|
required:
|
|
- clientId
|
|
- userId
|
|
type: object
|
|
additionalProperties: false
|
|
LoginPayload:
|
|
properties:
|
|
username:
|
|
type: string
|
|
description: 'Username for user'
|
|
example: secretuser
|
|
password:
|
|
type: string
|
|
description: 'Password for user'
|
|
example: secretpassword
|
|
required:
|
|
- username
|
|
- password
|
|
type: object
|
|
additionalProperties: false
|
|
AuthorizeResponse:
|
|
properties:
|
|
code:
|
|
type: string
|
|
description: 'Authorization code'
|
|
example: someRandomCryptoString
|
|
required:
|
|
- code
|
|
type: object
|
|
additionalProperties: false
|
|
AuthorizePayload:
|
|
properties:
|
|
clientId:
|
|
type: string
|
|
description: 'Client ID'
|
|
example: clientID1
|
|
required:
|
|
- clientId
|
|
type: object
|
|
additionalProperties: false
|
|
ClientPayload:
|
|
properties:
|
|
clientId:
|
|
type: string
|
|
description: 'Client ID'
|
|
example: someFormattedClientID1234
|
|
clientSecret:
|
|
type: string
|
|
description: 'Client Secret'
|
|
example: someRandomCryptoString
|
|
required:
|
|
- clientId
|
|
- clientSecret
|
|
type: object
|
|
additionalProperties: false
|
|
IRecordOfAny:
|
|
properties: {}
|
|
type: object
|
|
additionalProperties: {}
|
|
LogLine:
|
|
properties:
|
|
line:
|
|
type: string
|
|
required:
|
|
- line
|
|
type: object
|
|
additionalProperties: false
|
|
HTTPHeaders:
|
|
properties: {}
|
|
type: object
|
|
additionalProperties:
|
|
type: string
|
|
ExecuteReturnJsonResponse:
|
|
properties:
|
|
status:
|
|
type: string
|
|
_webout:
|
|
anyOf:
|
|
-
|
|
type: string
|
|
-
|
|
$ref: '#/components/schemas/IRecordOfAny'
|
|
log:
|
|
items:
|
|
$ref: '#/components/schemas/LogLine'
|
|
type: array
|
|
message:
|
|
type: string
|
|
httpHeaders:
|
|
$ref: '#/components/schemas/HTTPHeaders'
|
|
required:
|
|
- status
|
|
- _webout
|
|
- log
|
|
- httpHeaders
|
|
type: object
|
|
additionalProperties: false
|
|
RunTimeType:
|
|
enum:
|
|
- sas
|
|
- js
|
|
type: string
|
|
ExecuteSASCodePayload:
|
|
properties:
|
|
code:
|
|
type: string
|
|
description: 'Code of program'
|
|
example: '* Code HERE;'
|
|
runTime:
|
|
$ref: '#/components/schemas/RunTimeType'
|
|
description: 'runtime for program'
|
|
example: js
|
|
required:
|
|
- code
|
|
- runTime
|
|
type: object
|
|
additionalProperties: false
|
|
MemberType.folder:
|
|
enum:
|
|
- folder
|
|
type: string
|
|
FolderMember:
|
|
properties:
|
|
name:
|
|
type: string
|
|
type:
|
|
$ref: '#/components/schemas/MemberType.folder'
|
|
members:
|
|
items:
|
|
anyOf:
|
|
-
|
|
$ref: '#/components/schemas/FolderMember'
|
|
-
|
|
$ref: '#/components/schemas/ServiceMember'
|
|
-
|
|
$ref: '#/components/schemas/FileMember'
|
|
type: array
|
|
required:
|
|
- name
|
|
- type
|
|
- members
|
|
type: object
|
|
additionalProperties: false
|
|
MemberType.service:
|
|
enum:
|
|
- service
|
|
type: string
|
|
ServiceMember:
|
|
properties:
|
|
name:
|
|
type: string
|
|
type:
|
|
$ref: '#/components/schemas/MemberType.service'
|
|
code:
|
|
type: string
|
|
required:
|
|
- name
|
|
- type
|
|
- code
|
|
type: object
|
|
additionalProperties: false
|
|
MemberType.file:
|
|
enum:
|
|
- file
|
|
type: string
|
|
FileMember:
|
|
properties:
|
|
name:
|
|
type: string
|
|
type:
|
|
$ref: '#/components/schemas/MemberType.file'
|
|
code:
|
|
type: string
|
|
required:
|
|
- name
|
|
- type
|
|
- code
|
|
type: object
|
|
additionalProperties: false
|
|
FileTree:
|
|
properties:
|
|
members:
|
|
items:
|
|
anyOf:
|
|
-
|
|
$ref: '#/components/schemas/FolderMember'
|
|
-
|
|
$ref: '#/components/schemas/ServiceMember'
|
|
-
|
|
$ref: '#/components/schemas/FileMember'
|
|
type: array
|
|
required:
|
|
- members
|
|
type: object
|
|
additionalProperties: false
|
|
DeployResponse:
|
|
properties:
|
|
status:
|
|
type: string
|
|
message:
|
|
type: string
|
|
streamServiceName:
|
|
type: string
|
|
example:
|
|
$ref: '#/components/schemas/FileTree'
|
|
required:
|
|
- status
|
|
- message
|
|
type: object
|
|
additionalProperties: false
|
|
DeployPayload:
|
|
properties:
|
|
appLoc:
|
|
type: string
|
|
streamWebFolder:
|
|
type: string
|
|
fileTree:
|
|
$ref: '#/components/schemas/FileTree'
|
|
required:
|
|
- appLoc
|
|
- fileTree
|
|
type: object
|
|
additionalProperties: false
|
|
UpdateFileResponse:
|
|
properties:
|
|
status:
|
|
type: string
|
|
message:
|
|
type: string
|
|
required:
|
|
- status
|
|
type: object
|
|
additionalProperties: false
|
|
TreeNode:
|
|
properties:
|
|
name:
|
|
type: string
|
|
relativePath:
|
|
type: string
|
|
absolutePath:
|
|
type: string
|
|
children:
|
|
items:
|
|
$ref: '#/components/schemas/TreeNode'
|
|
type: array
|
|
required:
|
|
- name
|
|
- relativePath
|
|
- absolutePath
|
|
- children
|
|
type: object
|
|
additionalProperties: false
|
|
GetFileTreeResponse:
|
|
properties:
|
|
status:
|
|
type: string
|
|
tree:
|
|
$ref: '#/components/schemas/TreeNode'
|
|
required:
|
|
- status
|
|
- tree
|
|
type: object
|
|
additionalProperties: false
|
|
UserResponse:
|
|
properties:
|
|
id:
|
|
type: number
|
|
format: double
|
|
username:
|
|
type: string
|
|
displayName:
|
|
type: string
|
|
required:
|
|
- id
|
|
- username
|
|
- displayName
|
|
type: object
|
|
additionalProperties: false
|
|
GroupResponse:
|
|
properties:
|
|
groupId:
|
|
type: number
|
|
format: double
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
required:
|
|
- groupId
|
|
- name
|
|
- description
|
|
type: object
|
|
additionalProperties: false
|
|
UserDetailsResponse:
|
|
properties:
|
|
id:
|
|
type: number
|
|
format: double
|
|
displayName:
|
|
type: string
|
|
username:
|
|
type: string
|
|
isActive:
|
|
type: boolean
|
|
isAdmin:
|
|
type: boolean
|
|
autoExec:
|
|
type: string
|
|
groups:
|
|
items:
|
|
$ref: '#/components/schemas/GroupResponse'
|
|
type: array
|
|
required:
|
|
- id
|
|
- displayName
|
|
- username
|
|
- isActive
|
|
- isAdmin
|
|
type: object
|
|
additionalProperties: false
|
|
UserPayload:
|
|
properties:
|
|
displayName:
|
|
type: string
|
|
description: 'Display name for user'
|
|
example: 'John Snow'
|
|
username:
|
|
type: string
|
|
description: 'Username for user'
|
|
example: johnSnow01
|
|
password:
|
|
type: string
|
|
description: 'Password for user'
|
|
isAdmin:
|
|
type: boolean
|
|
description: 'Account should be admin or not, defaults to false'
|
|
example: 'false'
|
|
isActive:
|
|
type: boolean
|
|
description: 'Account should be active or not, defaults to true'
|
|
example: 'true'
|
|
autoExec:
|
|
type: string
|
|
description: 'User-specific auto-exec code'
|
|
example: ""
|
|
required:
|
|
- displayName
|
|
- username
|
|
- password
|
|
type: object
|
|
additionalProperties: false
|
|
GroupDetailsResponse:
|
|
properties:
|
|
groupId:
|
|
type: number
|
|
format: double
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
isActive:
|
|
type: boolean
|
|
users:
|
|
items:
|
|
$ref: '#/components/schemas/UserResponse'
|
|
type: array
|
|
required:
|
|
- groupId
|
|
- name
|
|
- description
|
|
- isActive
|
|
- users
|
|
type: object
|
|
additionalProperties: false
|
|
GroupPayload:
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: 'Name of the group'
|
|
example: DCGroup
|
|
description:
|
|
type: string
|
|
description: 'Description of the group'
|
|
example: 'This group represents Data Controller Users'
|
|
isActive:
|
|
type: boolean
|
|
description: 'Group should be active or not, defaults to true'
|
|
example: 'true'
|
|
required:
|
|
- name
|
|
- description
|
|
type: object
|
|
additionalProperties: false
|
|
InfoResponse:
|
|
properties:
|
|
mode:
|
|
type: string
|
|
cors:
|
|
type: string
|
|
whiteList:
|
|
items:
|
|
type: string
|
|
type: array
|
|
protocol:
|
|
type: string
|
|
runTimes:
|
|
items:
|
|
type: string
|
|
type: array
|
|
required:
|
|
- mode
|
|
- cors
|
|
- whiteList
|
|
- protocol
|
|
- runTimes
|
|
type: object
|
|
additionalProperties: false
|
|
ExecuteReturnJsonPayload:
|
|
properties:
|
|
_program:
|
|
type: string
|
|
description: 'Location of SAS program'
|
|
example: /Public/somefolder/some.file
|
|
type: object
|
|
additionalProperties: false
|
|
securitySchemes:
|
|
bearerAuth:
|
|
type: http
|
|
scheme: bearer
|
|
bearerFormat: JWT
|
|
info:
|
|
title: api
|
|
version: 0.0.2
|
|
description: 'Api of SASjs server'
|
|
contact:
|
|
name: '4GL Ltd'
|
|
openapi: 3.0.0
|
|
paths:
|
|
/SASjsApi/auth/token:
|
|
post:
|
|
operationId: Token
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TokenResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {accessToken: someRandomCryptoString, refreshToken: someRandomCryptoString}
|
|
summary: 'Accepts client/auth code and returns access/refresh tokens'
|
|
tags:
|
|
- Auth
|
|
security: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TokenPayload'
|
|
/SASjsApi/auth/refresh:
|
|
post:
|
|
operationId: Refresh
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TokenResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {accessToken: someRandomCryptoString, refreshToken: someRandomCryptoString}
|
|
summary: 'Returns new access/refresh tokens'
|
|
tags:
|
|
- Auth
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
/SASjsApi/auth/logout:
|
|
post:
|
|
operationId: Logout
|
|
responses:
|
|
'204':
|
|
description: 'No content'
|
|
summary: 'Logout terminate access/refresh tokens and returns nothing'
|
|
tags:
|
|
- Auth
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
/:
|
|
get:
|
|
operationId: Home
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
summary: 'Render index.html'
|
|
tags:
|
|
- Web
|
|
security: []
|
|
parameters: []
|
|
/SASLogon/login:
|
|
post:
|
|
operationId: Login
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
user: {properties: {displayName: {type: string}, username: {type: string}, id: {type: number, format: double}}, required: [displayName, username, id], type: object}
|
|
loggedIn: {type: boolean}
|
|
required:
|
|
- user
|
|
- loggedIn
|
|
type: object
|
|
summary: 'Accept a valid username/password'
|
|
tags:
|
|
- Web
|
|
security: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/LoginPayload'
|
|
/SASLogon/authorize:
|
|
post:
|
|
operationId: Authorize
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthorizeResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {code: someRandomCryptoString}
|
|
summary: 'Accept a valid username/password, plus a CLIENT_ID, and return an AUTH_CODE'
|
|
tags:
|
|
- Web
|
|
security: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/AuthorizePayload'
|
|
/logout:
|
|
get:
|
|
operationId: Logout
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema: {}
|
|
summary: 'Accept a valid username/password'
|
|
tags:
|
|
- Web
|
|
security: []
|
|
parameters: []
|
|
/SASjsApi/client:
|
|
post:
|
|
operationId: CreateClient
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ClientPayload'
|
|
examples:
|
|
'Example 1':
|
|
value: {clientId: someFormattedClientID1234, clientSecret: someRandomCryptoString}
|
|
summary: 'Create client with the following attributes: ClientId, ClientSecret. Admin only task.'
|
|
tags:
|
|
- Client
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ClientPayload'
|
|
/SASjsApi/code/execute:
|
|
post:
|
|
operationId: ExecuteSASCode
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ExecuteReturnJsonResponse'
|
|
description: 'Execute SAS code.'
|
|
summary: 'Run SAS Code and returns log'
|
|
tags:
|
|
- CODE
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ExecuteSASCodePayload'
|
|
/SASjsApi/drive/deploy:
|
|
post:
|
|
operationId: Deploy
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeployResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: success, message: 'Files deployed successfully to @sasjs/server.'}
|
|
'400':
|
|
description: 'Invalid Format'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeployResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: failure, message: 'Provided not supported data format.'}
|
|
'500':
|
|
description: 'Execution Error'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeployResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: failure, message: 'Deployment failed!'}
|
|
summary: 'Creates/updates files within SASjs Drive using provided payload.'
|
|
tags:
|
|
- Drive
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeployPayload'
|
|
/SASjsApi/drive/deploy/upload:
|
|
post:
|
|
operationId: DeployUpload
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeployResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: success, message: 'Files deployed successfully to @sasjs/server.'}
|
|
'400':
|
|
description: 'Invalid Format'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeployResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: failure, message: 'Provided not supported data format.'}
|
|
'500':
|
|
description: 'Execution Error'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DeployResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: failure, message: 'Deployment failed!'}
|
|
summary: 'Creates/updates files within SASjs Drive using uploaded JSON file.'
|
|
tags:
|
|
- Drive
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
file:
|
|
type: string
|
|
format: binary
|
|
required:
|
|
- file
|
|
/SASjsApi/drive/file:
|
|
get:
|
|
operationId: GetFile
|
|
responses:
|
|
'204':
|
|
description: 'No content'
|
|
summary: 'Get file from SASjs Drive'
|
|
tags:
|
|
- Drive
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
in: query
|
|
name: _filePath
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: /Public/somefolder/some.file
|
|
delete:
|
|
operationId: DeleteFile
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
status: {type: string}
|
|
required:
|
|
- status
|
|
type: object
|
|
summary: 'Delete file from SASjs Drive'
|
|
tags:
|
|
- Drive
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
in: query
|
|
name: _filePath
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: /Public/somefolder/some.file
|
|
post:
|
|
operationId: SaveFile
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UpdateFileResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: success}
|
|
'403':
|
|
description: 'File already exists'
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UpdateFileResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: failure, message: 'File request failed.'}
|
|
description: "It's optional to either provide `_filePath` in url as query parameter\nOr provide `filePath` in body as form field.\nBut it's required to provide else API will respond with Bad Request."
|
|
summary: 'Create a file in SASjs Drive'
|
|
tags:
|
|
- Drive
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'Location of SAS program'
|
|
in: query
|
|
name: _filePath
|
|
required: false
|
|
schema:
|
|
type: string
|
|
example: /Public/somefolder/some.file.sas
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
file:
|
|
type: string
|
|
format: binary
|
|
filePath:
|
|
type: string
|
|
required:
|
|
- file
|
|
patch:
|
|
operationId: UpdateFile
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UpdateFileResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: success}
|
|
'403':
|
|
description: ""
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UpdateFileResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: failure, message: 'File request failed.'}
|
|
description: "It's optional to either provide `_filePath` in url as query parameter\nOr provide `filePath` in body as form field.\nBut it's required to provide else API will respond with Bad Request."
|
|
summary: 'Modify a file in SASjs Drive'
|
|
tags:
|
|
- Drive
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'Location of SAS program'
|
|
in: query
|
|
name: _filePath
|
|
required: false
|
|
schema:
|
|
type: string
|
|
example: /Public/somefolder/some.file.sas
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
file:
|
|
type: string
|
|
format: binary
|
|
filePath:
|
|
type: string
|
|
required:
|
|
- file
|
|
/SASjsApi/drive/folder:
|
|
get:
|
|
operationId: GetFolder
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
folders: {items: {type: string}, type: array}
|
|
files: {items: {type: string}, type: array}
|
|
required:
|
|
- folders
|
|
- files
|
|
type: object
|
|
summary: 'Get folder contents from SASjs Drive'
|
|
tags:
|
|
- Drive
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
in: query
|
|
name: _folderPath
|
|
required: false
|
|
schema:
|
|
type: string
|
|
example: /Public/somefolder
|
|
/SASjsApi/drive/filetree:
|
|
get:
|
|
operationId: GetFileTree
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GetFileTreeResponse'
|
|
summary: 'Fetch file tree within SASjs Drive.'
|
|
tags:
|
|
- Drive
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
/SASjsApi/user:
|
|
get:
|
|
operationId: GetAllUsers
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/UserResponse'
|
|
type: array
|
|
examples:
|
|
'Example 1':
|
|
value: [{id: 123, username: johnusername, displayName: John}, {id: 456, username: starkusername, displayName: Stark}]
|
|
summary: 'Get list of all users (username, displayname). All users can request this.'
|
|
tags:
|
|
- User
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
post:
|
|
operationId: CreateUser
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserDetailsResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {id: 1234, displayName: 'John Snow', username: johnSnow01, isAdmin: false, isActive: true}
|
|
summary: 'Create user with the following attributes: UserId, UserName, Password, isAdmin, isActive. Admin only task.'
|
|
tags:
|
|
- User
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserPayload'
|
|
'/SASjsApi/user/by/username/{username}':
|
|
get:
|
|
operationId: GetUserByUsername
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserDetailsResponse'
|
|
description: 'Only Admin or user itself will get user autoExec code.'
|
|
summary: 'Get user properties - such as group memberships, userName, displayName.'
|
|
tags:
|
|
- User
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The User''s username'
|
|
in: path
|
|
name: username
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: johnSnow01
|
|
patch:
|
|
operationId: UpdateUserByUsername
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserDetailsResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {id: 1234, displayName: 'John Snow', username: johnSnow01, isAdmin: false, isActive: true}
|
|
summary: 'Update user properties - such as displayName. Can be performed either by admins, or the user in question.'
|
|
tags:
|
|
- User
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The User''s username'
|
|
in: path
|
|
name: username
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: johnSnow01
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserPayload'
|
|
delete:
|
|
operationId: DeleteUserByUsername
|
|
responses:
|
|
'204':
|
|
description: 'No content'
|
|
summary: 'Delete a user. Can be performed either by admins, or the user in question.'
|
|
tags:
|
|
- User
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The User''s username'
|
|
in: path
|
|
name: username
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: johnSnow01
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
password:
|
|
type: string
|
|
type: object
|
|
'/SASjsApi/user/{userId}':
|
|
get:
|
|
operationId: GetUser
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserDetailsResponse'
|
|
description: 'Only Admin or user itself will get user autoExec code.'
|
|
summary: 'Get user properties - such as group memberships, userName, displayName.'
|
|
tags:
|
|
- User
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The user''s identifier'
|
|
in: path
|
|
name: userId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: 1234
|
|
patch:
|
|
operationId: UpdateUser
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserDetailsResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {id: 1234, displayName: 'John Snow', username: johnSnow01, isAdmin: false, isActive: true}
|
|
summary: 'Update user properties - such as displayName. Can be performed either by admins, or the user in question.'
|
|
tags:
|
|
- User
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The user''s identifier'
|
|
in: path
|
|
name: userId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: '1234'
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserPayload'
|
|
delete:
|
|
operationId: DeleteUser
|
|
responses:
|
|
'204':
|
|
description: 'No content'
|
|
summary: 'Delete a user. Can be performed either by admins, or the user in question.'
|
|
tags:
|
|
- User
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The user''s identifier'
|
|
in: path
|
|
name: userId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: 1234
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
password:
|
|
type: string
|
|
type: object
|
|
/SASjsApi/group:
|
|
get:
|
|
operationId: GetAllGroups
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/GroupResponse'
|
|
type: array
|
|
examples:
|
|
'Example 1':
|
|
value: [{groupId: 123, name: DCGroup, description: 'This group represents Data Controller Users'}]
|
|
summary: 'Get list of all groups (groupName and groupDescription). All users can request this.'
|
|
tags:
|
|
- Group
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
post:
|
|
operationId: CreateGroup
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GroupDetailsResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {groupId: 123, name: DCGroup, description: 'This group represents Data Controller Users', isActive: true, users: []}
|
|
summary: 'Create a new group. Admin only.'
|
|
tags:
|
|
- Group
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GroupPayload'
|
|
'/SASjsApi/group/{groupId}':
|
|
get:
|
|
operationId: GetGroup
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GroupDetailsResponse'
|
|
summary: 'Get list of members of a group (userName). All users can request this.'
|
|
tags:
|
|
- Group
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The group''s identifier'
|
|
in: path
|
|
name: groupId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: 1234
|
|
delete:
|
|
operationId: DeleteGroup
|
|
responses:
|
|
'204':
|
|
description: 'No content'
|
|
summary: 'Delete a group. Admin task only.'
|
|
tags:
|
|
- Group
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The group''s identifier'
|
|
in: path
|
|
name: groupId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: 1234
|
|
'/SASjsApi/group/{groupId}/{userId}':
|
|
post:
|
|
operationId: AddUserToGroup
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GroupDetailsResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {groupId: 123, name: DCGroup, description: 'This group represents Data Controller Users', isActive: true, users: []}
|
|
summary: 'Add a user to a group. Admin task only.'
|
|
tags:
|
|
- Group
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The group''s identifier'
|
|
in: path
|
|
name: groupId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: '1234'
|
|
-
|
|
description: 'The user''s identifier'
|
|
in: path
|
|
name: userId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: '6789'
|
|
delete:
|
|
operationId: RemoveUserFromGroup
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/GroupDetailsResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {groupId: 123, name: DCGroup, description: 'This group represents Data Controller Users', isActive: true, users: []}
|
|
summary: 'Remove a user to a group. Admin task only.'
|
|
tags:
|
|
- Group
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'The group''s identifier'
|
|
in: path
|
|
name: groupId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: '1234'
|
|
-
|
|
description: 'The user''s identifier'
|
|
in: path
|
|
name: userId
|
|
required: true
|
|
schema:
|
|
format: double
|
|
type: number
|
|
example: '6789'
|
|
/SASjsApi/info:
|
|
get:
|
|
operationId: Info
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/InfoResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {mode: desktop, cors: enable, whiteList: ['http://example.com', 'http://example2.com'], protocol: http, runTimes: [sas, js]}
|
|
summary: 'Get server info (mode, cors, whiteList, protocol).'
|
|
tags:
|
|
- Info
|
|
security: []
|
|
parameters: []
|
|
/SASjsApi/session:
|
|
get:
|
|
operationId: Session
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {id: 123, username: johnusername, displayName: John}
|
|
summary: 'Get session info (username).'
|
|
tags:
|
|
- Session
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters: []
|
|
/SASjsApi/stp/execute:
|
|
get:
|
|
operationId: ExecuteReturnRaw
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
anyOf:
|
|
- {type: string}
|
|
- {type: string, format: byte}
|
|
description: "Trigger a SAS or JS program using the _program URL parameter.\n\nAccepts URL parameters and file uploads. For more details, see docs:\n\nhttps://server.sasjs.io/storedprograms"
|
|
summary: 'Execute a Stored Program, returns raw _webout content.'
|
|
tags:
|
|
- STP
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'Location of SAS or JS code'
|
|
in: query
|
|
name: _program
|
|
required: true
|
|
schema:
|
|
type: string
|
|
example: /Projects/myApp/some/program
|
|
post:
|
|
operationId: ExecuteReturnJson
|
|
responses:
|
|
'200':
|
|
description: Ok
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ExecuteReturnJsonResponse'
|
|
examples:
|
|
'Example 1':
|
|
value: {status: success, _webout: 'webout content', log: [], httpHeaders: {Content-type: application/zip, Cache-Control: 'public, max-age=1000'}}
|
|
description: "Trigger a SAS or JS program using the _program URL parameter.\n\nAccepts URL parameters and file uploads. For more details, see docs:\n\nhttps://server.sasjs.io/storedprograms\n\nThe response will be a JSON object with the following root attributes:\nlog, webout, headers.\n\nThe webout attribute will be nested JSON ONLY if the response-header\ncontains a content-type of application/json AND it is valid JSON.\nOtherwise it will be a stringified version of the webout content."
|
|
summary: 'Execute a Stored Program, return a JSON object'
|
|
tags:
|
|
- STP
|
|
security:
|
|
-
|
|
bearerAuth: []
|
|
parameters:
|
|
-
|
|
description: 'Location of SAS or JS code'
|
|
in: query
|
|
name: _program
|
|
required: false
|
|
schema:
|
|
type: string
|
|
example: /Projects/myApp/some/program
|
|
requestBody:
|
|
required: false
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ExecuteReturnJsonPayload'
|
|
servers:
|
|
-
|
|
url: /
|
|
tags:
|
|
-
|
|
name: Info
|
|
description: 'Get Server Info'
|
|
-
|
|
name: Session
|
|
description: 'Get Session information'
|
|
-
|
|
name: User
|
|
description: 'Operations about users'
|
|
-
|
|
name: Client
|
|
description: 'Operations about clients'
|
|
-
|
|
name: Auth
|
|
description: 'Operations about auth'
|
|
-
|
|
name: Drive
|
|
description: 'Operations about drive'
|
|
-
|
|
name: Group
|
|
description: 'Operations about group'
|
|
-
|
|
name: STP
|
|
description: 'Operations about STP'
|
|
-
|
|
name: CODE
|
|
description: 'Operations on SAS code'
|
|
-
|
|
name: Web
|
|
description: 'Operations on Web'
|