mirror of
https://github.com/sasjs/adapter.git
synced 2025-12-11 09:24:35 +00:00
Merge branch 'master' into create-context
This commit is contained in:
18
package-lock.json
generated
18
package-lock.json
generated
@@ -1103,9 +1103,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"supports-color": {
|
"supports-color": {
|
||||||
"version": "7.1.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"has-flag": "^4.0.0"
|
"has-flag": "^4.0.0"
|
||||||
@@ -1648,9 +1648,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/jest": {
|
"@types/jest": {
|
||||||
"version": "26.0.10",
|
"version": "26.0.13",
|
||||||
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.10.tgz",
|
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.13.tgz",
|
||||||
"integrity": "sha512-i2m0oyh8w/Lum7wWK/YOZJakYF8Mx08UaKA1CtbmFeDquVhAEdA7znacsVSf2hJ1OQ/OfVMGN90pw/AtzF8s/Q==",
|
"integrity": "sha512-sCzjKow4z9LILc6DhBvn5AkIfmQzDZkgtVVKmGwVrs5tuid38ws281D4l+7x1kP487+FlKDh5kfMZ8WSPAdmdA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"jest-diff": "^25.2.1",
|
"jest-diff": "^25.2.1",
|
||||||
@@ -5904,9 +5904,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"supports-color": {
|
"supports-color": {
|
||||||
"version": "7.1.0",
|
"version": "7.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"has-flag": "^4.0.0"
|
"has-flag": "^4.0.0"
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/isomorphic-fetch": "0.0.35",
|
"@types/isomorphic-fetch": "0.0.35",
|
||||||
"@types/jest": "^26.0.10",
|
"@types/jest": "^26.0.13",
|
||||||
"cp": "^0.2.0",
|
"cp": "^0.2.0",
|
||||||
"jest": "^25.5.4",
|
"jest": "^25.5.4",
|
||||||
"path": "^0.12.7",
|
"path": "^0.12.7",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { isLogInRequired, needsRetry } from './utils'
|
import { isLogInRequired, needsRetry, isUrl } from './utils'
|
||||||
import { CsrfToken } from './types/CsrfToken'
|
import { CsrfToken } from './types/CsrfToken'
|
||||||
import { UploadFile } from './types/UploadFile'
|
import { UploadFile } from './types/UploadFile'
|
||||||
|
|
||||||
@@ -11,7 +11,10 @@ export class FileUploader {
|
|||||||
private jobsPath: string,
|
private jobsPath: string,
|
||||||
private setCsrfTokenWeb: any,
|
private setCsrfTokenWeb: any,
|
||||||
private csrfToken: CsrfToken | null = null
|
private csrfToken: CsrfToken | null = null
|
||||||
) {}
|
) {
|
||||||
|
if (serverUrl) isUrl(serverUrl)
|
||||||
|
}
|
||||||
|
|
||||||
private retryCount = 0
|
private retryCount = 0
|
||||||
|
|
||||||
public uploadFile(sasJob: string, files: UploadFile[], params: any) {
|
public uploadFile(sasJob: string, files: UploadFile[], params: any) {
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
|
import { isUrl } from './utils'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A client for interfacing with the SAS9 REST API
|
* A client for interfacing with the SAS9 REST API
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export class SAS9ApiClient {
|
export class SAS9ApiClient {
|
||||||
constructor(private serverUrl: string) {}
|
constructor(private serverUrl: string) {
|
||||||
|
if (serverUrl) isUrl(serverUrl)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns on object containing the server URL
|
* returns on object containing the server URL
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ import {
|
|||||||
isAuthorizeFormRequired,
|
isAuthorizeFormRequired,
|
||||||
parseAndSubmitAuthorizeForm,
|
parseAndSubmitAuthorizeForm,
|
||||||
convertToCSV,
|
convertToCSV,
|
||||||
makeRequest
|
makeRequest,
|
||||||
|
isUrl
|
||||||
} from './utils'
|
} from './utils'
|
||||||
import * as NodeFormData from 'form-data'
|
import * as NodeFormData from 'form-data'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
@@ -26,7 +27,10 @@ export class SASViyaApiClient {
|
|||||||
if (!rootFolderName) {
|
if (!rootFolderName) {
|
||||||
throw new Error('Root folder must be provided.')
|
throw new Error('Root folder must be provided.')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (serverUrl) isUrl(serverUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
private csrfToken: CsrfToken | null = null
|
private csrfToken: CsrfToken | null = null
|
||||||
private rootFolder: Folder | null = null
|
private rootFolder: Folder | null = null
|
||||||
private sessionManager = new SessionManager(
|
private sessionManager = new SessionManager(
|
||||||
|
|||||||
@@ -883,7 +883,7 @@ export default class SASjs {
|
|||||||
) {
|
) {
|
||||||
if (this.retryCountWeb < requestRetryLimit) {
|
if (this.retryCountWeb < requestRetryLimit) {
|
||||||
this.retryCountWeb++
|
this.retryCountWeb++
|
||||||
this.request(sasJob, data).then(
|
this.request(sasJob, data, config, loginRequiredCallback).then(
|
||||||
(res: any) => resolve(res),
|
(res: any) => resolve(res),
|
||||||
(err: any) => reject(err)
|
(err: any) => reject(err)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Session, Context, CsrfToken } from './types'
|
import { Session, Context, CsrfToken } from './types'
|
||||||
import { asyncForEach, makeRequest } from './utils'
|
import { asyncForEach, makeRequest, isUrl } from './utils'
|
||||||
|
|
||||||
const MAX_SESSION_COUNT = 1
|
const MAX_SESSION_COUNT = 1
|
||||||
|
|
||||||
@@ -8,7 +8,10 @@ export class SessionManager {
|
|||||||
private serverUrl: string,
|
private serverUrl: string,
|
||||||
private contextName: string,
|
private contextName: string,
|
||||||
private setCsrfToken: (csrfToken: CsrfToken) => void
|
private setCsrfToken: (csrfToken: CsrfToken) => void
|
||||||
) {}
|
) {
|
||||||
|
if (serverUrl) isUrl(serverUrl)
|
||||||
|
}
|
||||||
|
|
||||||
private sessions: Session[] = []
|
private sessions: Session[] = []
|
||||||
private currentContext: Context | null = null
|
private currentContext: Context | null = null
|
||||||
private csrfToken: CsrfToken | null = null
|
private csrfToken: CsrfToken | null = null
|
||||||
|
|||||||
@@ -13,3 +13,4 @@ export * from './parseSasViyaLog'
|
|||||||
export * from './serialize'
|
export * from './serialize'
|
||||||
export * from './splitChunks'
|
export * from './splitChunks'
|
||||||
export * from './parseWeboutResponse'
|
export * from './parseWeboutResponse'
|
||||||
|
export * from './isUrl'
|
||||||
|
|||||||
12
src/utils/isUrl.ts
Normal file
12
src/utils/isUrl.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
export const isUrl = (url: string): boolean => {
|
||||||
|
const pattern = new RegExp(
|
||||||
|
'^(http://|https://)[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(/.*)?$',
|
||||||
|
'gi'
|
||||||
|
)
|
||||||
|
|
||||||
|
if (pattern.test(url)) return true
|
||||||
|
else
|
||||||
|
throw new Error(
|
||||||
|
`'${url}' is not a valid url. An example of a valid url is 'http://valid-url.com'.`
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user