mirror of
https://github.com/sasjs/server.git
synced 2025-12-10 19:34:34 +00:00
fix(stp): return json for webout
This commit is contained in:
@@ -92,6 +92,10 @@ components:
|
||||
- clientSecret
|
||||
type: object
|
||||
additionalProperties: false
|
||||
IRecordOfAny:
|
||||
properties: {}
|
||||
type: object
|
||||
additionalProperties: {}
|
||||
LogLine:
|
||||
properties:
|
||||
line:
|
||||
@@ -110,7 +114,11 @@ components:
|
||||
status:
|
||||
type: string
|
||||
_webout:
|
||||
type: string
|
||||
anyOf:
|
||||
-
|
||||
type: string
|
||||
-
|
||||
$ref: '#/components/schemas/IRecordOfAny'
|
||||
log:
|
||||
items:
|
||||
$ref: '#/components/schemas/LogLine'
|
||||
@@ -539,9 +547,7 @@ paths:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
anyOf:
|
||||
- {$ref: '#/components/schemas/ExecuteReturnJsonResponse'}
|
||||
- {type: string, format: byte}
|
||||
$ref: '#/components/schemas/ExecuteReturnJsonResponse'
|
||||
description: 'Execute SAS code.'
|
||||
summary: 'Run SAS Code and returns log'
|
||||
tags:
|
||||
@@ -630,6 +636,7 @@ paths:
|
||||
bearerAuth: []
|
||||
parameters:
|
||||
-
|
||||
description: 'Location of SAS program'
|
||||
in: query
|
||||
name: filePath
|
||||
required: true
|
||||
@@ -1068,6 +1075,7 @@ paths:
|
||||
bearerAuth: []
|
||||
parameters:
|
||||
-
|
||||
description: 'Location of SAS program'
|
||||
in: query
|
||||
name: _program
|
||||
required: true
|
||||
@@ -1082,9 +1090,7 @@ paths:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
anyOf:
|
||||
- {$ref: '#/components/schemas/ExecuteReturnJsonResponse'}
|
||||
- {type: string, format: byte}
|
||||
$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'}}
|
||||
@@ -1097,6 +1103,7 @@ paths:
|
||||
bearerAuth: []
|
||||
parameters:
|
||||
-
|
||||
description: 'Location of SAS program'
|
||||
in: query
|
||||
name: _program
|
||||
required: false
|
||||
|
||||
@@ -25,7 +25,7 @@ export class CodeController {
|
||||
public async executeSASCode(
|
||||
@Request() request: express.Request,
|
||||
@Body() body: ExecuteSASCodePayload
|
||||
): Promise<ExecuteReturnJsonResponse | Buffer> {
|
||||
): Promise<ExecuteReturnJsonResponse> {
|
||||
return executeSASCode(request, body)
|
||||
}
|
||||
}
|
||||
@@ -41,14 +41,9 @@ const executeSASCode = async (req: any, { code }: ExecuteSASCodePayload) => {
|
||||
true
|
||||
)) as ExecuteReturnJson
|
||||
|
||||
if (webout instanceof Buffer) {
|
||||
;(req as any).sasHeaders = httpHeaders
|
||||
return webout
|
||||
}
|
||||
|
||||
return {
|
||||
status: 'success',
|
||||
_webout: webout,
|
||||
_webout: webout as string,
|
||||
log: parseLogToArray(log),
|
||||
httpHeaders
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ export class DriveController {
|
||||
|
||||
/**
|
||||
* @summary Get file from SASjs Drive
|
||||
* @query filePath Location of SAS program
|
||||
* @param filePath Location of SAS program
|
||||
* @example filePath "/Public/somefolder/some.file"
|
||||
*/
|
||||
@Example<GetFileResponse>({
|
||||
|
||||
@@ -148,7 +148,8 @@ ${program}`
|
||||
? await readFile(headersPath)
|
||||
: ''
|
||||
const httpHeaders: HTTPHeaders = extractHeaders(headersContent)
|
||||
const fileResponse: boolean = httpHeaders.hasOwnProperty('content-type')
|
||||
const fileResponse: boolean =
|
||||
httpHeaders.hasOwnProperty('content-type') && !returnJson
|
||||
|
||||
const webout = (await fileExists(weboutPath))
|
||||
? fileResponse
|
||||
|
||||
@@ -33,9 +33,13 @@ interface ExecuteReturnJsonPayload {
|
||||
*/
|
||||
_program?: string
|
||||
}
|
||||
|
||||
interface IRecordOfAny {
|
||||
[key: string]: any
|
||||
}
|
||||
export interface ExecuteReturnJsonResponse {
|
||||
status: string
|
||||
_webout: string
|
||||
_webout: string | IRecordOfAny
|
||||
log: LogLine[]
|
||||
message?: string
|
||||
httpHeaders: HTTPHeaders
|
||||
@@ -52,7 +56,7 @@ export class STPController {
|
||||
* Any files provided are placed into the session and
|
||||
* corresponding _WEBIN_XXX variables are created.
|
||||
* @summary Execute Stored Program, return raw content
|
||||
* @query _program Location of SAS program
|
||||
* @param _program Location of SAS program
|
||||
* @example _program "/Public/somefolder/some.file"
|
||||
*/
|
||||
@Get('/execute')
|
||||
@@ -70,7 +74,7 @@ export class STPController {
|
||||
* Any files provided are placed into the session and
|
||||
* corresponding _WEBIN_XXX variables are created.
|
||||
* @summary Execute Stored Program, return JSON
|
||||
* @query _program Location of SAS program
|
||||
* @param _program Location of SAS program
|
||||
* @example _program "/Public/somefolder/some.file"
|
||||
*/
|
||||
@Example<ExecuteReturnJsonResponse>({
|
||||
@@ -87,7 +91,7 @@ export class STPController {
|
||||
@Request() request: express.Request,
|
||||
@Body() body?: ExecuteReturnJsonPayload,
|
||||
@Query() _program?: string
|
||||
): Promise<ExecuteReturnJsonResponse | Buffer> {
|
||||
): Promise<ExecuteReturnJsonResponse> {
|
||||
const program = _program ?? body?._program
|
||||
return executeReturnJson(request, program!)
|
||||
}
|
||||
@@ -131,7 +135,7 @@ const executeReturnRaw = async (
|
||||
const executeReturnJson = async (
|
||||
req: any,
|
||||
_program: string
|
||||
): Promise<ExecuteReturnJsonResponse | Buffer> => {
|
||||
): Promise<ExecuteReturnJsonResponse> => {
|
||||
const sasCodePath =
|
||||
path
|
||||
.join(getTmpFilesFolderPath(), _program)
|
||||
@@ -149,14 +153,16 @@ const executeReturnJson = async (
|
||||
true
|
||||
)) as ExecuteReturnJson
|
||||
|
||||
if (webout instanceof Buffer) {
|
||||
;(req as any).sasHeaders = httpHeaders
|
||||
return webout
|
||||
let weboutRes: string | IRecordOfAny = webout
|
||||
if (httpHeaders['content-type']?.toLowerCase() === 'application/json') {
|
||||
try {
|
||||
weboutRes = JSON.parse(webout as string)
|
||||
} catch (_) {}
|
||||
}
|
||||
|
||||
return {
|
||||
status: 'success',
|
||||
_webout: webout,
|
||||
_webout: weboutRes,
|
||||
log: parseLogToArray(log),
|
||||
httpHeaders
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user