@sasjs/adapter 3.4.0 → 3.5.1

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.
@@ -16,7 +16,7 @@ export declare class SASjsConfig {
16
16
  * The location of the STP Process Web Application. By default the adapter
17
17
  * will use '/SASjsApi/stp/execute' on SAS JS.
18
18
  */
19
- pathSASJS?: string;
19
+ pathSASJS: string;
20
20
  /**
21
21
  * The location of the Stored Process Web Application. By default the adapter
22
22
  * will use '/SASStoredProcess/do' on SAS 9.
@@ -1,3 +1,2 @@
1
- /// <reference types="node" />
2
1
  import * as https from 'https';
3
2
  export declare const createAxiosInstance: (baseURL: string, httpsAgent?: https.Agent | undefined) => import("axios").AxiosInstance;
package/package.json CHANGED
@@ -40,45 +40,45 @@
40
40
  },
41
41
  "license": "ISC",
42
42
  "devDependencies": {
43
- "@types/axios": "^0.14.0",
44
- "@types/express": "^4.17.13",
45
- "@types/form-data": "^2.5.0",
46
- "@types/jest": "^27.0.2",
47
- "@types/mime": "^2.0.3",
48
- "@types/pem": "^1.9.6",
49
- "@types/tough-cookie": "^4.0.1",
50
- "copyfiles": "^2.4.1",
51
- "cp": "^0.2.0",
52
- "dotenv": "^10.0.0",
53
- "express": "^4.17.1",
54
- "jest": "^27.2.0",
55
- "jest-extended": "^0.11.5",
56
- "node-polyfill-webpack-plugin": "^1.1.4",
57
- "path": "^0.12.7",
58
- "pem": "^1.14.4",
59
- "process": "^0.11.10",
60
- "rimraf": "^3.0.2",
61
- "semantic-release": "^18.0.0",
62
- "terser-webpack-plugin": "^5.2.4",
63
- "ts-jest": "^27.0.3",
64
- "ts-loader": "^9.2.6",
65
- "tslint": "^6.1.3",
66
- "tslint-config-prettier": "^1.18.0",
67
- "typedoc": "0.19.2",
68
- "typedoc-neo-theme": "^1.1.1",
69
- "typedoc-plugin-external-module-name": "^4.0.6",
70
- "typescript": "4.3.5",
71
- "webpack": "^5.56.0",
72
- "webpack-cli": "^4.7.2"
43
+ "@types/axios": "0.14.0",
44
+ "@types/express": "4.17.13",
45
+ "@types/form-data": "2.5.0",
46
+ "@types/jest": "27.0.2",
47
+ "@types/mime": "2.0.3",
48
+ "@types/pem": "1.9.6",
49
+ "@types/tough-cookie": "4.0.1",
50
+ "copyfiles": "2.4.1",
51
+ "cp": "0.2.0",
52
+ "dotenv": "10.0.0",
53
+ "express": "4.17.1",
54
+ "jest": "27.4.7",
55
+ "jest-extended": "2.0.0",
56
+ "node-polyfill-webpack-plugin": "1.1.4",
57
+ "path": "0.12.7",
58
+ "pem": "1.14.4",
59
+ "process": "0.11.10",
60
+ "rimraf": "3.0.2",
61
+ "semantic-release": "18.0.0",
62
+ "terser-webpack-plugin": "5.3.0",
63
+ "ts-jest": "27.1.3",
64
+ "ts-loader": "9.2.6",
65
+ "tslint": "6.1.3",
66
+ "tslint-config-prettier": "1.18.0",
67
+ "typedoc": "0.22.11",
68
+ "typedoc-neo-theme": "1.1.1",
69
+ "typedoc-plugin-external-module-name": "4.0.6",
70
+ "typescript": "4.5.4",
71
+ "webpack": "5.66.0",
72
+ "webpack-cli": "4.7.2"
73
73
  },
74
74
  "main": "index.js",
75
75
  "dependencies": {
76
- "@sasjs/utils": "^2.32.0",
77
- "axios": "^0.21.4",
78
- "axios-cookiejar-support": "^1.0.1",
79
- "form-data": "^4.0.0",
80
- "https": "^1.0.0",
81
- "tough-cookie": "^4.0.0"
76
+ "@sasjs/utils": "2.35.0",
77
+ "axios": "0.26.0",
78
+ "axios-cookiejar-support": "1.0.1",
79
+ "form-data": "4.0.0",
80
+ "https": "1.0.0",
81
+ "tough-cookie": "4.0.0"
82
82
  },
83
- "version": "3.4.0"
83
+ "version": "3.5.1"
84
84
  }
package/src/SASjs.ts CHANGED
@@ -5,9 +5,8 @@ import {
5
5
  EditContextInput,
6
6
  PollOptions,
7
7
  LoginMechanism,
8
- FolderMember,
9
- ServiceMember,
10
- ExecutionQuery
8
+ ExecutionQuery,
9
+ FileTree
11
10
  } from './types'
12
11
  import { SASViyaApiClient } from './SASViyaApiClient'
13
12
  import { SAS9ApiClient } from './SAS9ApiClient'
@@ -865,8 +864,22 @@ export default class SASjs {
865
864
  )
866
865
  }
867
866
 
868
- public async deployToSASjs(members: [FolderMember, ServiceMember]) {
869
- return await this.sasJSApiClient?.deploy(members, this.sasjsConfig.appLoc)
867
+ /**
868
+ * Creates the folders and services at the given location `appLoc` on the given server `serverUrl`.
869
+ * @param members - the JSON specifying the folders and services to be created.
870
+ * @param appLoc - the base folder in which to create the new folders and
871
+ * services. If not provided, is taken from SASjsConfig.
872
+ * @param authConfig - a valid client, secret, refresh and access tokens that are authorised to execute compute jobs.
873
+ */
874
+ public async deployToSASjs(
875
+ members: FileTree,
876
+ appLoc?: string,
877
+ authConfig?: AuthConfig
878
+ ) {
879
+ if (!appLoc) {
880
+ appLoc = this.sasjsConfig.appLoc
881
+ }
882
+ return await this.sasJSApiClient?.deploy(members, appLoc, authConfig)
870
883
  }
871
884
 
872
885
  public async executeJobSASjs(query: ExecutionQuery) {
@@ -1018,7 +1031,7 @@ export default class SASjs {
1018
1031
  ? this.sasjsConfig.pathSASViya
1019
1032
  : this.sasjsConfig.serverType === ServerType.Sas9
1020
1033
  ? this.sasjsConfig.pathSAS9
1021
- : this.sasjsConfig.pathSASJS || ''
1034
+ : this.sasjsConfig.pathSASJS
1022
1035
 
1023
1036
  this.authManager = new AuthManager(
1024
1037
  this.sasjsConfig.serverUrl,
@@ -1,8 +1,11 @@
1
- import { FolderMember, ServiceMember, ExecutionQuery } from './types'
1
+ import { AuthConfig, ServerType } from '@sasjs/utils/types'
2
+ import { FileTree, ExecutionQuery } from './types'
2
3
  import { RequestClient } from './request/RequestClient'
3
4
  import { getAccessTokenForSasjs } from './auth/getAccessTokenForSasjs'
4
5
  import { refreshTokensForSasjs } from './auth/refreshTokensForSasjs'
5
6
  import { getAuthCodeForSasjs } from './auth/getAuthCodeForSasjs'
7
+ import { parseWeboutResponse } from './utils'
8
+ import { getTokens } from './auth/getTokens'
6
9
 
7
10
  export class SASjsApiClient {
8
11
  constructor(
@@ -14,7 +17,19 @@ export class SASjsApiClient {
14
17
  if (serverUrl) this.serverUrl = serverUrl
15
18
  }
16
19
 
17
- public async deploy(members: [FolderMember, ServiceMember], appLoc: string) {
20
+ public async deploy(
21
+ members: FileTree,
22
+ appLoc: string,
23
+ authConfig?: AuthConfig
24
+ ) {
25
+ let access_token = (authConfig || {}).access_token
26
+ if (authConfig) {
27
+ ;({ access_token } = await getTokens(
28
+ this.requestClient,
29
+ authConfig,
30
+ ServerType.Sasjs
31
+ ))
32
+ }
18
33
  const { result } = await this.requestClient.post<{
19
34
  status: string
20
35
  message: string
@@ -22,7 +37,7 @@ export class SASjsApiClient {
22
37
  }>(
23
38
  'SASjsApi/drive/deploy',
24
39
  { fileTree: members, appLoc: appLoc },
25
- undefined
40
+ access_token
26
41
  )
27
42
 
28
43
  return Promise.resolve(result)
@@ -35,8 +50,13 @@ export class SASjsApiClient {
35
50
  log?: string
36
51
  logPath?: string
37
52
  error?: {}
53
+ _webout?: string
38
54
  }>('SASjsApi/stp/execute', query, undefined)
39
55
 
56
+ if (Object.keys(result).includes('_webout')) {
57
+ result._webout = parseWeboutResponse(result._webout!)
58
+ }
59
+
40
60
  return Promise.resolve(result)
41
61
  }
42
62
 
@@ -272,7 +272,13 @@ export async function executeScript(
272
272
 
273
273
  return { result: jobResult?.result, log }
274
274
  } catch (e) {
275
- if (e && e.status === 404) {
275
+ interface HttpError {
276
+ status: number
277
+ }
278
+
279
+ const error = e as HttpError
280
+
281
+ if (error.status === 404) {
276
282
  return executeScript(
277
283
  requestClient,
278
284
  sessionManager,
@@ -287,7 +293,7 @@ export async function executeScript(
287
293
  true
288
294
  )
289
295
  } else {
290
- throw prefixMessage(e, 'Error while executing script. ')
296
+ throw prefixMessage(e as Error, 'Error while executing script. ')
291
297
  }
292
298
  }
293
299
  }
@@ -3,13 +3,9 @@ import { WriteStream } from '../../types'
3
3
  export const writeStream = async (
4
4
  stream: WriteStream,
5
5
  content: string
6
- ): Promise<void> => {
7
- return new Promise((resolve, reject) => {
8
- stream.write(content + '\n', (e) => {
9
- if (e) {
10
- return reject(e)
11
- }
12
- return resolve()
13
- })
6
+ ): Promise<void> =>
7
+ stream.write(content + '\n', (e) => {
8
+ if (e) return Promise.reject(e)
9
+
10
+ return Promise.resolve()
14
11
  })
15
- }
@@ -16,7 +16,7 @@ export class SASjsConfig {
16
16
  * The location of the STP Process Web Application. By default the adapter
17
17
  * will use '/SASjsApi/stp/execute' on SAS JS.
18
18
  */
19
- pathSASJS?: string = ''
19
+ pathSASJS: string = ''
20
20
  /**
21
21
  * The location of the Stored Process Web Application. By default the adapter
22
22
  * will use '/SASStoredProcess/do' on SAS 9.
@@ -0,0 +1 @@
1
+ import 'jest-extended'
@@ -10,6 +10,7 @@ export const parseWeboutResponse = (response: string, url?: string): string => {
10
10
  .split('>>weboutEND<<')[0]
11
11
  } catch (e) {
12
12
  if (url) throw new WeboutResponseError(url)
13
+
13
14
  sasResponse = ''
14
15
  console.error(e)
15
16
  }
package/tsconfig.json CHANGED
@@ -6,7 +6,8 @@
6
6
  "declaration": true,
7
7
  "outDir": "./build",
8
8
  "strict": true,
9
- "sourceMap": true
9
+ "sourceMap": true,
10
+ "typeRoots": ["./node_modules/@types", "./src/types/system"]
10
11
  },
11
12
  "include": ["src"],
12
13
  "exclude": ["node_modules"]
@@ -16,7 +16,7 @@ export declare class SASjsConfig {
16
16
  * The location of the STP Process Web Application. By default the adapter
17
17
  * will use '/SASjsApi/stp/execute' on SAS JS.
18
18
  */
19
- pathSASJS?: string;
19
+ pathSASJS: string;
20
20
  /**
21
21
  * The location of the Stored Process Web Application. By default the adapter
22
22
  * will use '/SASStoredProcess/do' on SAS 9.
@@ -1,3 +1,2 @@
1
- /// <reference types="node" />
2
1
  import * as https from 'https';
3
2
  export declare const createAxiosInstance: (baseURL: string, httpsAgent?: https.Agent | undefined) => import("axios").AxiosInstance;