1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-06 04:00:05 +00:00

feat: get access token & refresh tokens for server type SASJS

This commit is contained in:
Saad Jutt
2021-12-09 11:43:50 +05:00
parent b645d1495b
commit ebe9c2ffeb
14 changed files with 319 additions and 69 deletions

View File

@@ -11,13 +11,14 @@ import {
} from './types'
import { SASViyaApiClient } from './SASViyaApiClient'
import { SAS9ApiClient } from './SAS9ApiClient'
import { SASjsApiClient } from './SASjsApiClient'
import { SASjsApiClient, SASjsAuthResponse } from './SASjsApiClient'
import { AuthManager } from './auth'
import {
ServerType,
MacroVar,
AuthConfig,
ExtraResponseAttributes
ExtraResponseAttributes,
SasAuthResponse
} from '@sasjs/utils/types'
import { RequestClient } from './request/RequestClient'
import {
@@ -53,7 +54,7 @@ export default class SASjs {
private jobsPath: string = ''
private sasViyaApiClient: SASViyaApiClient | null = null
private sas9ApiClient: SAS9ApiClient | null = null
private SASjsApiClient: SASjsApiClient | null = null
private sasJSApiClient: SASjsApiClient | null = null
private fileUploader: FileUploader | null = null
private authManager: AuthManager | null = null
private requestClient: RequestClient | null = null
@@ -80,7 +81,7 @@ export default class SASjs {
userName: string,
password: string
) {
this.isMethodSupported('executeScriptSAS9', ServerType.Sas9)
this.isMethodSupported('executeScriptSAS9', [ServerType.Sas9])
return await this.sas9ApiClient?.executeScript(
linesOfCode,
@@ -94,7 +95,7 @@ export default class SASjs {
* @param accessToken - an access token for an authorized user.
*/
public async getComputeContexts(accessToken: string) {
this.isMethodSupported('getComputeContexts', ServerType.SasViya)
this.isMethodSupported('getComputeContexts', [ServerType.SasViya])
return await this.sasViyaApiClient!.getComputeContexts(accessToken)
}
@@ -104,7 +105,7 @@ export default class SASjs {
* @param accessToken - an access token for an authorized user.
*/
public async getLauncherContexts(accessToken: string) {
this.isMethodSupported('getLauncherContexts', ServerType.SasViya)
this.isMethodSupported('getLauncherContexts', [ServerType.SasViya])
return await this.sasViyaApiClient!.getLauncherContexts(accessToken)
}
@@ -113,7 +114,7 @@ export default class SASjs {
* Gets default(system) launcher contexts.
*/
public getDefaultComputeContexts() {
this.isMethodSupported('getDefaultComputeContexts', ServerType.SasViya)
this.isMethodSupported('getDefaultComputeContexts', [ServerType.SasViya])
return this.sasViyaApiClient!.getDefaultComputeContexts()
}
@@ -123,7 +124,7 @@ export default class SASjs {
* @param authConfig - an access token, refresh token, client and secret for an authorized user.
*/
public async getExecutableContexts(authConfig: AuthConfig) {
this.isMethodSupported('getExecutableContexts', ServerType.SasViya)
this.isMethodSupported('getExecutableContexts', [ServerType.SasViya])
return await this.sasViyaApiClient!.getExecutableContexts(authConfig)
}
@@ -145,7 +146,7 @@ export default class SASjs {
accessToken: string,
authorizedUsers?: string[]
) {
this.isMethodSupported('createComputeContext', ServerType.SasViya)
this.isMethodSupported('createComputeContext', [ServerType.SasViya])
return await this.sasViyaApiClient!.createComputeContext(
contextName,
@@ -170,7 +171,7 @@ export default class SASjs {
launchType: string,
accessToken: string
) {
this.isMethodSupported('createLauncherContext', ServerType.SasViya)
this.isMethodSupported('createLauncherContext', [ServerType.SasViya])
return await this.sasViyaApiClient!.createLauncherContext(
contextName,
@@ -191,7 +192,7 @@ export default class SASjs {
editedContext: EditContextInput,
accessToken?: string
) {
this.isMethodSupported('editComputeContext', ServerType.SasViya)
this.isMethodSupported('editComputeContext', [ServerType.SasViya])
return await this.sasViyaApiClient!.editComputeContext(
contextName,
@@ -206,7 +207,7 @@ export default class SASjs {
* @param accessToken - an access token for an authorized user.
*/
public async deleteComputeContext(contextName: string, accessToken?: string) {
this.isMethodSupported('deleteComputeContext', ServerType.SasViya)
this.isMethodSupported('deleteComputeContext', [ServerType.SasViya])
return await this.sasViyaApiClient!.deleteComputeContext(
contextName,
@@ -224,7 +225,7 @@ export default class SASjs {
contextName: string,
accessToken?: string
) {
this.isMethodSupported('getComputeContextByName', ServerType.SasViya)
this.isMethodSupported('getComputeContextByName', [ServerType.SasViya])
return await this.sasViyaApiClient!.getComputeContextByName(
contextName,
@@ -238,7 +239,7 @@ export default class SASjs {
* @param accessToken - an access token for an authorized user.
*/
public async getComputeContextById(contextId: string, accessToken?: string) {
this.isMethodSupported('getComputeContextById', ServerType.SasViya)
this.isMethodSupported('getComputeContextById', [ServerType.SasViya])
return await this.sasViyaApiClient!.getComputeContextById(
contextId,
@@ -247,7 +248,7 @@ export default class SASjs {
}
public async createSession(contextName: string, accessToken: string) {
this.isMethodSupported('createSession', ServerType.SasViya)
this.isMethodSupported('createSession', [ServerType.SasViya])
return await this.sasViyaApiClient!.createSession(contextName, accessToken)
}
@@ -267,7 +268,7 @@ export default class SASjs {
authConfig?: AuthConfig,
debug?: boolean
) {
this.isMethodSupported('executeScriptSASViya', ServerType.SasViya)
this.isMethodSupported('executeScriptSASViya', [ServerType.SasViya])
if (!contextName) {
throw new Error(
'Context name is undefined. Please set a `contextName` in your SASjs or override config.'
@@ -357,7 +358,7 @@ export default class SASjs {
* @param accessToken - the access token to authorize the request.
*/
public async getFolder(folderPath: string, accessToken?: string) {
this.isMethodSupported('getFolder', ServerType.SasViya)
this.isMethodSupported('getFolder', [ServerType.SasViya])
return await this.sasViyaApiClient!.getFolder(folderPath, accessToken)
}
@@ -367,7 +368,7 @@ export default class SASjs {
* @param accessToken - an access token for authorizing the request.
*/
public async deleteFolder(folderPath: string, accessToken: string) {
this.isMethodSupported('deleteFolder', ServerType.SasViya)
this.isMethodSupported('deleteFolder', [ServerType.SasViya])
return await this.sasViyaApiClient?.deleteFolder(folderPath, accessToken)
}
@@ -382,7 +383,7 @@ export default class SASjs {
accessToken?: string,
limit?: number
) {
this.isMethodSupported('listFolder', ServerType.SasViya)
this.isMethodSupported('listFolder', [ServerType.SasViya])
return await this.sasViyaApiClient?.listFolder(
sourceFolder,
@@ -404,7 +405,7 @@ export default class SASjs {
targetFolderName: string,
accessToken: string
) {
this.isMethodSupported('moveFolder', ServerType.SasViya)
this.isMethodSupported('moveFolder', [ServerType.SasViya])
return await this.sasViyaApiClient?.moveFolder(
sourceFolder,
@@ -422,7 +423,7 @@ export default class SASjs {
accessToken?: string,
sasApiClient?: SASViyaApiClient
) {
this.isMethodSupported('createJobDefinition', ServerType.SasViya)
this.isMethodSupported('createJobDefinition', [ServerType.SasViya])
if (sasApiClient)
return await sasApiClient!.createJobDefinition(
@@ -442,7 +443,7 @@ export default class SASjs {
}
public async getAuthCode(clientId: string) {
this.isMethodSupported('getAuthCode', ServerType.SasViya)
this.isMethodSupported('getAuthCode', [ServerType.SasViya])
return await this.sasViyaApiClient!.getAuthCode(clientId)
}
@@ -457,8 +458,14 @@ export default class SASjs {
clientId: string,
clientSecret: string,
authCode: string
) {
this.isMethodSupported('getAccessToken', ServerType.SasViya)
): Promise<SasAuthResponse | SASjsAuthResponse> {
this.isMethodSupported('getAccessToken', [
ServerType.SasViya,
ServerType.Sasjs
])
if (this.sasjsConfig.serverType === ServerType.Sasjs)
return await this.sasJSApiClient!.getAccessToken(clientId, authCode)
return await this.sasViyaApiClient!.getAccessToken(
clientId,
@@ -467,12 +474,24 @@ export default class SASjs {
)
}
/**
* Exchanges the refresh token for an access token for the given client.
* @param clientId - the client ID to authenticate with.
* @param clientSecret - the client secret to authenticate with.
* @param refreshToken - the refresh token received from the server.
*/
public async refreshTokens(
clientId: string,
clientSecret: string,
refreshToken: string
) {
this.isMethodSupported('refreshTokens', ServerType.SasViya)
): Promise<SasAuthResponse | SASjsAuthResponse> {
this.isMethodSupported('refreshTokens', [
ServerType.SasViya,
ServerType.Sasjs
])
if (this.sasjsConfig.serverType === ServerType.Sasjs)
return await this.sasJSApiClient!.refreshTokens(refreshToken)
return await this.sasViyaApiClient!.refreshTokens(
clientId,
@@ -482,7 +501,7 @@ export default class SASjs {
}
public async deleteClient(clientId: string, accessToken: string) {
this.isMethodSupported('deleteClient', ServerType.SasViya)
this.isMethodSupported('deleteClient', [ServerType.SasViya])
return await this.sasViyaApiClient!.deleteClient(clientId, accessToken)
}
@@ -777,7 +796,7 @@ export default class SASjs {
accessToken?: string,
isForced = false
) {
this.isMethodSupported('deployServicePack', ServerType.SasViya)
this.isMethodSupported('deployServicePack', [ServerType.SasViya])
let sasApiClient: any = null
if (serverUrl || appLoc) {
@@ -832,11 +851,11 @@ export default class SASjs {
}
public async deployToSASjs(members: [FolderMember, ServiceMember]) {
return await this.SASjsApiClient?.deploy(members, this.sasjsConfig.appLoc)
return await this.sasJSApiClient?.deploy(members, this.sasjsConfig.appLoc)
}
public async executeJobSASjs(query: ExecutionQuery) {
return await this.SASjsApiClient?.executeJob(query)
return await this.sasJSApiClient?.executeJob(query)
}
/**
@@ -872,7 +891,7 @@ export default class SASjs {
...config
}
this.isMethodSupported('startComputeJob', ServerType.SasViya)
this.isMethodSupported('startComputeJob', [ServerType.SasViya])
if (!config.contextName) {
throw new Error(
'Context name is undefined. Please set a `contextName` in your SASjs or override config.'
@@ -1020,10 +1039,10 @@ export default class SASjs {
}
if (this.sasjsConfig.serverType === ServerType.Sasjs) {
if (this.SASjsApiClient) {
this.SASjsApiClient.setConfig(this.sasjsConfig.serverUrl)
if (this.sasJSApiClient) {
this.sasJSApiClient.setConfig(this.sasjsConfig.serverUrl)
} else {
this.SASjsApiClient = new SASjsApiClient(
this.sasJSApiClient = new SASjsApiClient(
this.sasjsConfig.serverUrl,
this.requestClient
)
@@ -1117,12 +1136,15 @@ export default class SASjs {
})
}
private isMethodSupported(method: string, serverType: string) {
if (this.sasjsConfig.serverType !== serverType) {
private isMethodSupported(method: string, serverTypes: ServerType[]) {
if (
!this.sasjsConfig.serverType ||
!serverTypes.includes(this.sasjsConfig.serverType)
) {
throw new Error(
`Method '${method}' is only supported on ${
serverType === ServerType.Sas9 ? 'SAS9' : 'SAS Viya'
} servers.`
`Method '${method}' is only supported on ${serverTypes.join(
', '
)} servers.`
)
}
}