1
0
mirror of https://github.com/sasjs/adapter.git synced 2025-12-11 09:24:35 +00:00

Compare commits

..

14 Commits

Author SHA1 Message Date
snyk-bot
28e0e3a147 fix: upgrade axios from 0.26.0 to 0.26.1
Snyk has created this PR to upgrade axios from 0.26.0 to 0.26.1.

See this package in npm:
https://www.npmjs.com/package/axios

See this project in Snyk:
https://app.snyk.io/org/allanbowe/project/2cf085e5-c256-4a84-bf6a-227076754853?utm_source=github&utm_medium=referral&page=upgrade-pr
2022-03-30 20:49:57 +00:00
Allan Bowe
ee97e8211e Merge pull request #685 from sasjs/issue-684
fix: blob is not defined
2022-03-28 14:26:58 +03:00
d0eb1a7bfb fix: should not create blob in node 2022-03-24 02:43:14 +05:00
Allan Bowe
256e4ef314 Merge pull request #681 from sasjs/sasjs-deploy-with-streaming-app
feat(deploy): stream app deployment on SASJS server
2022-03-21 23:54:40 +02:00
Saad Jutt
6a6dfc5e9d chore: corrected authorised in SASjs.ts only 2022-03-22 02:49:46 +05:00
Saad Jutt
5140848039 chore: sasjs deploy return template type 2022-03-22 02:38:20 +05:00
Saad Jutt
31baf01d3e feat(deploy): stream app deployment on SASJS server 2022-03-22 01:18:02 +05:00
Allan Bowe
804e78cf0c Merge pull request #678 from sasjs/issue-677
fix: return requestPromise from sas9JobExecutor
2022-03-11 12:54:17 +02:00
f6a621fe46 chore: update comments 2022-03-11 14:22:45 +05:00
c47d0c9789 fix: return requestPromise from sas9JobExecutor #677 2022-03-11 14:16:44 +05:00
Allan Bowe
1ddc71b017 Create CNAME 2022-03-10 12:08:46 +00:00
Allan Bowe
3e507885ab Merge pull request #676 from sasjs/issue-675
fix: no need to stringify res/err in sas9JobExecutor before appending…
2022-03-10 14:06:50 +02:00
e92d0d73b5 chore: add comments 2022-03-10 16:17:09 +05:00
00a99e752c fix: no need to stringify res/err in sas9JobExecutor before appending request #675 2022-03-10 15:44:38 +05:00
7 changed files with 83 additions and 65 deletions

1
docs/CNAME Normal file
View File

@@ -0,0 +1 @@
adapter.sasjs.io

28
package-lock.json generated
View File

@@ -8,8 +8,8 @@
"hasInstallScript": true,
"license": "ISC",
"dependencies": {
"@sasjs/utils": "2.36.1",
"axios": "0.26.0",
"@sasjs/utils": "2.40.0",
"axios": "^0.26.1",
"axios-cookiejar-support": "1.0.1",
"form-data": "4.0.0",
"https": "1.0.0",
@@ -1142,9 +1142,9 @@
}
},
"node_modules/@sasjs/utils": {
"version": "2.36.1",
"resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.36.1.tgz",
"integrity": "sha512-JkGUpLOODsvkeU+S25jb9k2WnvzyD2w6cEk7YyQ/byuqKL8xawH91PPWegrVcJlDY8WmqKE4CPcA3d1mM3B3LA==",
"version": "2.40.0",
"resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.40.0.tgz",
"integrity": "sha512-U0y/eqRlvfkMHmKDlr1xmeN+Rask7TnJPuRpOz71P8QpGYTw1M9AyZvzRSk503p4KCJb8ysdcqXyGVLfhuoM+A==",
"hasInstallScript": true,
"dependencies": {
"@types/fs-extra": "9.0.13",
@@ -2189,9 +2189,9 @@
}
},
"node_modules/axios": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz",
"integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==",
"version": "0.26.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"dependencies": {
"follow-redirects": "^1.14.8"
}
@@ -13870,9 +13870,9 @@
}
},
"@sasjs/utils": {
"version": "2.36.1",
"resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.36.1.tgz",
"integrity": "sha512-JkGUpLOODsvkeU+S25jb9k2WnvzyD2w6cEk7YyQ/byuqKL8xawH91PPWegrVcJlDY8WmqKE4CPcA3d1mM3B3LA==",
"version": "2.40.0",
"resolved": "https://registry.npmjs.org/@sasjs/utils/-/utils-2.40.0.tgz",
"integrity": "sha512-U0y/eqRlvfkMHmKDlr1xmeN+Rask7TnJPuRpOz71P8QpGYTw1M9AyZvzRSk503p4KCJb8ysdcqXyGVLfhuoM+A==",
"requires": {
"@types/fs-extra": "9.0.13",
"@types/prompts": "2.0.13",
@@ -14787,9 +14787,9 @@
"dev": true
},
"axios": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.0.tgz",
"integrity": "sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==",
"version": "0.26.1",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
"integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
"requires": {
"follow-redirects": "^1.14.8"
}

View File

@@ -72,8 +72,8 @@
},
"main": "index.js",
"dependencies": {
"@sasjs/utils": "2.36.1",
"axios": "0.26.0",
"@sasjs/utils": "2.40.0",
"axios": "0.26.1",
"axios-cookiejar-support": "1.0.1",
"form-data": "4.0.0",
"https": "1.0.0",

View File

@@ -17,7 +17,8 @@ import {
MacroVar,
AuthConfig,
ExtraResponseAttributes,
SasAuthResponse
SasAuthResponse,
StreamConfig
} from '@sasjs/utils/types'
import { RequestClient } from './request/RequestClient'
import { SasjsRequestClient } from './request/SasjsRequestClient'
@@ -134,7 +135,7 @@ export default class SASjs {
/**
* Gets compute contexts.
* @param accessToken - an access token for an authorized user.
* @param accessToken - an access token for an authorised user.
*/
public async getComputeContexts(accessToken: string) {
this.isMethodSupported('getComputeContexts', [ServerType.SasViya])
@@ -144,7 +145,7 @@ export default class SASjs {
/**
* Gets launcher contexts.
* @param accessToken - an access token for an authorized user.
* @param accessToken - an access token for an authorised user.
*/
public async getLauncherContexts(accessToken: string) {
this.isMethodSupported('getLauncherContexts', [ServerType.SasViya])
@@ -163,7 +164,7 @@ export default class SASjs {
/**
* Gets executable compute contexts.
* @param authConfig - an access token, refresh token, client and secret for an authorized user.
* @param authConfig - an access token, refresh token, client and secret for an authorised user.
*/
public async getExecutableContexts(authConfig: AuthConfig) {
this.isMethodSupported('getExecutableContexts', [ServerType.SasViya])
@@ -177,8 +178,8 @@ export default class SASjs {
* @param launchContextName - the name of the launcher context used by the compute service.
* @param sharedAccountId - the ID of the account to run the servers for this context as.
* @param autoExecLines - the lines of code to execute during session initialization.
* @param accessToken - an access token for an authorized user.
* @param authorizedUsers - an optional list of authorized user IDs.
* @param accessToken - an access token for an authorised user.
* @param authorisedUsers - an optional list of authorised user IDs.
*/
public async createComputeContext(
contextName: string,
@@ -186,7 +187,7 @@ export default class SASjs {
sharedAccountId: string,
autoExecLines: string[],
accessToken: string,
authorizedUsers?: string[]
authorisedUsers?: string[]
) {
this.isMethodSupported('createComputeContext', [ServerType.SasViya])
@@ -196,7 +197,7 @@ export default class SASjs {
sharedAccountId,
autoExecLines,
accessToken,
authorizedUsers
authorisedUsers
)
}
@@ -205,7 +206,7 @@ export default class SASjs {
* @param contextName - the name of the context to be created.
* @param description - the description of the context to be created.
* @param launchType - launch type of the context to be created.
* @param accessToken - an access token for an authorized user.
* @param accessToken - an access token for an authorised user.
*/
public async createLauncherContext(
contextName: string,
@@ -227,7 +228,7 @@ export default class SASjs {
* Updates a compute context on the given server.
* @param contextName - the original name of the context to be deleted.
* @param editedContext - an object with the properties to be updated.
* @param accessToken - an access token for an authorized user.
* @param accessToken - an access token for an authorised user.
*/
public async editComputeContext(
contextName: string,
@@ -246,7 +247,7 @@ export default class SASjs {
/**
* Deletes a compute context on the given server.
* @param contextName - the name of the context to be deleted.
* @param accessToken - an access token for an authorized user.
* @param accessToken - an access token for an authorised user.
*/
public async deleteComputeContext(contextName: string, accessToken?: string) {
this.isMethodSupported('deleteComputeContext', [ServerType.SasViya])
@@ -261,7 +262,7 @@ export default class SASjs {
* Returns a JSON representation of a compute context.
* @example: { "createdBy": "admin", "links": [...], "id": "ID", "version": 2, "name": "context1" }
* @param contextName - the name of the context to return.
* @param accessToken - an access token for an authorized user.
* @param accessToken - an access token for an authorised user.
*/
public async getComputeContextByName(
contextName: string,
@@ -278,7 +279,7 @@ export default class SASjs {
/**
* Returns a JSON representation of a compute context.
* @param contextId - an id of the context to return.
* @param accessToken - an access token for an authorized user.
* @param accessToken - an access token for an authorised user.
*/
public async getComputeContextById(contextId: string, accessToken?: string) {
this.isMethodSupported('getComputeContextById', [ServerType.SasViya])
@@ -891,17 +892,24 @@ export default class SASjs {
* @param members - the JSON specifying the folders and services to be created.
* @param appLoc - the base folder in which to create the new folders and
* services. If not provided, is taken from SASjsConfig.
* @param streamConfig - optional configuration object of StreamConfig for deploying streaming app.
* @param authConfig - a valid client, secret, refresh and access tokens that are authorised to execute compute jobs.
*/
public async deployToSASjs(
members: FileTree,
appLoc?: string,
streamConfig?: StreamConfig,
authConfig?: AuthConfig
) {
if (!appLoc) {
appLoc = this.sasjsConfig.appLoc
}
return await this.sasJSApiClient?.deploy(members, appLoc, authConfig)
return await this.sasJSApiClient?.deploy(
members,
appLoc,
streamConfig,
authConfig
)
}
public async executeJobSASjs(query: ExecutionQuery) {
@@ -972,7 +980,7 @@ export default class SASjs {
/**
* Fetches content of the log file
* @param logUrl - url of the log file.
* @param accessToken - an access token for an authorized user.
* @param accessToken - an access token for an authorised user.
*/
public async fetchLogFileContent(logUrl: string, accessToken?: string) {
return await this.requestClient!.get(logUrl, accessToken).then((res) => {

View File

@@ -1,4 +1,4 @@
import { AuthConfig, ServerType } from '@sasjs/utils/types'
import { AuthConfig, ServerType, StreamConfig } from '@sasjs/utils/types'
import { FileTree, ExecutionQuery } from './types'
import { RequestClient } from './request/RequestClient'
import { getAccessTokenForSasjs } from './auth/getAccessTokenForSasjs'
@@ -20,6 +20,7 @@ export class SASjsApiClient {
public async deploy(
members: FileTree,
appLoc: string,
streamConfig?: StreamConfig,
authConfig?: AuthConfig
) {
let access_token = (authConfig || {}).access_token
@@ -33,10 +34,17 @@ export class SASjsApiClient {
const { result } = await this.requestClient.post<{
status: string
message: string
streamServiceName?: string
example?: {}
}>(
'SASjsApi/drive/deploy',
{ fileTree: members, appLoc: appLoc },
{
fileTree: members,
appLoc: appLoc,
streamServiceName: streamConfig?.streamServiceName,
streamWebFolder: streamConfig?.streamWebFolder,
streamLogo: streamConfig?.streamLogo
},
access_token,
undefined,
{},

View File

@@ -26,11 +26,18 @@ export const generateFileUploadForm = (
)
}
const file = new Blob([csv], {
type: 'application/csv'
})
if (typeof FormData === 'undefined' && formData instanceof NodeFormData) {
formData.append(name, csv, {
filename: `${name}.csv`,
contentType: 'application/csv'
})
} else {
const file = new Blob([csv], {
type: 'application/csv'
})
formData.append(name, file, `${name}.csv`)
formData.append(name, file, `${name}.csv`)
}
}
return formData

View File

@@ -74,38 +74,32 @@ export class Sas9JobExecutor extends BaseJobExecutor {
? 'multipart/form-data; boundary=' + (formData as any)._boundary
: 'text/plain'
return await this.sas9RequestClient!.post(
apiUrl,
formData,
undefined,
contentType,
{
const requestPromise = new Promise((resolve, reject) =>
this.sas9RequestClient!.post(apiUrl, formData, undefined, contentType, {
Accept: '*/*',
Connection: 'Keep-Alive'
}
})
.then((res: any) => {
// appending response to requests array that will be used for requests history reference
this.requestClient!.appendRequest(res, sasJob, config.debug)
resolve(res)
})
.catch((err: any) => {
// by default error string is equal to actual error object
let errString = err
// if error object contains non empty result attribute, set result to errString
if (err.result && err.result !== '') errString = err.result
// if there's no result but error message, set error message to errString
else if (err.message) errString = err.message
// appending error to requests array that will be used for requests history reference
this.requestClient!.appendRequest(errString, sasJob, config.debug)
reject(new ErrorResponse(err?.message, err))
})
)
.then((res: any) => {
let resString = res
if (typeof res === 'object') {
resString = JSON.stringify(res)
}
this.requestClient!.appendRequest(resString, sasJob, config.debug)
return res
})
.catch((err: any) => {
let errString = err
if (typeof err === 'object') {
errString = JSON.stringify(errString)
}
this.requestClient!.appendRequest(errString, sasJob, config.debug)
return err
})
return requestPromise
}
private getRequestParams(config: any): any {