Skip to content

Commit dd47a83

Browse files
authored
Merge pull request #216 from parthlambdatest/GS_Proxy
add smartui api proxy and smartui api skip certificates
2 parents 540cb5f + 9112ccd commit dd47a83

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

src/lib/env.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export default (): Env => {
1818
BASELINE_BRANCH,
1919
CURRENT_BRANCH,
2020
PROJECT_NAME,
21+
SMARTUI_API_PROXY,
22+
SMARTUI_API_SKIP_CERTIFICATES
2123
} = process.env
2224

2325
return {
@@ -36,6 +38,8 @@ export default (): Env => {
3638
CURRENT_BRANCH,
3739
LT_SDK_DEBUG: LT_SDK_DEBUG === 'true',
3840
SMARTUI_DO_NOT_USE_CAPTURED_COOKIES: SMARTUI_DO_NOT_USE_CAPTURED_COOKIES === 'true',
39-
PROJECT_NAME
41+
PROJECT_NAME,
42+
SMARTUI_API_PROXY,
43+
SMARTUI_API_SKIP_CERTIFICATES: SMARTUI_API_SKIP_CERTIFICATES === 'true'
4044
}
4145
}

src/lib/httpClient.ts

+27-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { Env, Snapshot, ProcessedSnapshot, Git, Build, Context } from '../types.
55
import constants from './constants.js';
66
import type { Logger } from 'winston'
77
import pkgJSON from './../../package.json'
8+
import https from 'https';
89

910
export default class httpClient {
1011
axiosInstance: AxiosInstance;
@@ -13,15 +14,38 @@ export default class httpClient {
1314
username: string;
1415
accessKey: string;
1516

16-
constructor({ SMARTUI_CLIENT_API_URL, PROJECT_TOKEN, PROJECT_NAME, LT_USERNAME, LT_ACCESS_KEY }: Env) {
17+
constructor({ SMARTUI_CLIENT_API_URL, PROJECT_TOKEN, PROJECT_NAME, LT_USERNAME, LT_ACCESS_KEY, SMARTUI_API_PROXY, SMARTUI_API_SKIP_CERTIFICATES }: Env) {
1718
this.projectToken = PROJECT_TOKEN || '';
1819
this.projectName = PROJECT_NAME || '';
1920
this.username = LT_USERNAME || '';
2021
this.accessKey = LT_ACCESS_KEY || '';
2122

22-
this.axiosInstance = axios.create({
23+
let proxyUrl = null;
24+
try {
25+
// Handle URL with or without protocol
26+
const urlStr = SMARTUI_API_PROXY?.startsWith('http') ?
27+
SMARTUI_API_PROXY : `http://${SMARTUI_API_PROXY}`;
28+
proxyUrl = SMARTUI_API_PROXY ? new URL(urlStr) : null;
29+
} catch (error) {
30+
console.error('Invalid proxy URL:', error);
31+
}
32+
const axiosConfig: any = {
2333
baseURL: SMARTUI_CLIENT_API_URL,
24-
});
34+
proxy: proxyUrl ? {
35+
host: proxyUrl.hostname,
36+
port: proxyUrl.port ? Number(proxyUrl.port) : 80
37+
} : false
38+
};
39+
40+
if (SMARTUI_API_SKIP_CERTIFICATES) {
41+
axiosConfig.httpsAgent = new https.Agent({
42+
rejectUnauthorized: false
43+
});
44+
}
45+
46+
this.axiosInstance = axios.create(axiosConfig);
47+
48+
2549
this.axiosInstance.interceptors.request.use((config) => {
2650
config.headers['projectToken'] = this.projectToken;
2751
config.headers['projectName'] = this.projectName;

src/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ export interface Env {
7272
BASELINE_BRANCH: string | undefined;
7373
CURRENT_BRANCH: string | undefined;
7474
PROJECT_NAME: string | undefined;
75+
SMARTUI_API_PROXY: string | undefined;
76+
SMARTUI_API_SKIP_CERTIFICATES: boolean;
7577
}
7678

7779
export interface Snapshot {

0 commit comments

Comments
 (0)