Sparrow On-Demand Node SDK
Node SDK를 사용하면 Sparrow On-Demand API를 직접 호출하지 않고도 소스코드 분석, 오픈소스 분석, 웹취약점 분석을 쉽게 수행할 수 있습니다.
Tip: Sparrow On-Demand Node SDK는 Typescript를 지원합니다.
목차
환경 설정
-
Node 20 이상 설치
-
npm 설정
npm install @sparrowai/ondemand-node-sdk -
Sparrow On-Demand API 토큰 필요
Tip: 토큰 발급을 참고하세요.
초기화
API를 호출할 클라이언트 객체 OndemandNodeClient를 생성하세요. OndemandClientConfig로 설정값을 지정할 수 있습니다.
import { OndemandNodeClient, OndemandClientConfig } from "@sparrowai/ondemand-node-sdk";
// config
const config = new OndemandClientConfig({ apiKey: "API_KEY" });
// create client
const client = new OndemandNodeClient(config);
- apiKey API 요청에서 인증에 사용하기 위해 Sparrow On-Demand에서 발급 받은 토큰(API_KEY)입니다.
분석 요청
공통 메소드
Node SDK에서는 소스코드 분석, 오픈소스 분석, 웹취약점 분석과 같이 분석 유형에 따라 다음과 같은 메소드를 제공합니다.
const requestInfo = await client.doAnalysis(analysisRequest);
- analysisRequest: 분석 유형별 요청 객체
소스코드 분석
import { getSastAnalysisRequest } from "@sparrowai/ondemand-node-sdk";
const sastVcsRequest = getSastAnalysisRequest({
analysisSource: {
type: 'Vcs',
source: {
url: 'https://github.com/jhkim593/PayProject.git',
branch: 'master',
authToken: 'authToken',
},
}
options: {
extensions: ['java'],
issueSimilarity: true,
},
callbacks: [
{
url: 'url',
type : ['ANALYSIS_PROGRESS'],
headers: { key: 'key', value: 'value' }
},
],
})
const requestInfo = await client.doAnalysis(sastVcsRequest);
- callbacks 콜백 목록
List- type 콜백 이벤트 유형
ANALYSIS_COMPLETE: 분석 종료 이벤트만 수신ANALYSIS_PROGRESS: 분석 종료를 제외한 분석 진행 이벤트를 수신SRC_UPLOAD: 소스 업로드
- url 콜백 URL
- headers 헤더 목록
- key 콜백 헤더 키
- value 콜백 헤더 값
- type 콜백 이벤트 유형
🔽 소스코드 분석 옵션
-
sastOptions
-
analysisSource
-
VCS
- url VCS URL
필수string - branch 브랜치
string - commitId 커밋 ID
string - tag 태그
string - id VCS ID
string - password VCS 비밀번호
string - authToken VCS 토큰
string
Tip: url만 입력하는 경우 Git 저장소에 기본값으로 설정된 브랜치의 최신 커밋에 포함된 파일을 분석합니다.
- url VCS URL
-
ObjectStorage
- endPoint 스토리지 엔드포인트
필수string - bucket 스토리지 버킷
필수string - object 스토리지 오브젝트 이름
필수string - accessKey 스토리지 액세스 키
string - secretKey 스토리지 시크릿 키
string
- endPoint 스토리지 엔드포인트
-
-
extensions 분석 대상 파일 확장자 목록
Tip: 다음 중 하나와 같이 입력하세요.
["java", "go"]["*"]압축 파일의 경우 압축 파일의 확장자가 분석 대상자에 해당하면 압축 파일 안에 있는 모든 파일이 분석에 포함됩니다.
-
excludedPath 분석 제외 경로
Tip: 대소문자를 구분하지 않으며
*를 사용할 수 있습니다.*AA*: AA가 포함된 모든 문자열과 일치AA*: AA로 시작하는 모든 문자열과 일치 다른 방법으로 분석 제외 경로를 설정하려는 경우 아래를 참고하세요.
-
maxSourceSize 최대 소스 크기
number소스코드 분석 또는 오픈소스 분석에서 검사할 분석 대상의 최대 크기입니다. 소스코드 분석 또는 오픈소스 분석을 수행하는 동안 내려받은 분석 대상의 크기가SOURCE_SIZE보다 크면 분석이 종료됩니다.1부터200사이의 정수를 입력할 수 있습니다.(단위: MB)
-
Tip: RequestInfo 객체를 반환합니다.
오픈소스 분석
import { getScaAnalysisRequest } from "@sparrowai/ondemand-node-sdk";
const scaObjectStorageRequest = getScaAnalysisRequest({
analysisSource: {
type: 'ObjectStorage',
source: {
bucket: 'bucket',
object: 'object',
accessKey: 'accessKey',
secretKey: 'secretKey',
},
}
options: {
sbomCreatorEmail : 'email'
},
callbacks: [
{
url: 'url',
type : ['ANALYSIS_PROGRESS'],
headers: { key: 'key', value: 'value' }
},
],
})
const requestInfo = await client.doAnalysis(scaObjectStorageRequest);
- callbacks 콜백 목록
List- type 콜백 이벤트 유형
ANALYSIS_COMPLETE: 분석 종료 이벤트만 수신ANALYSIS_PROGRESS: 분석 종료를 제외한 분석 진행 이벤트를 수신SRC_UPLOAD: 소스 업로드
- url 콜백 URL
- headers 헤더 목록
- key 콜백 헤더 키
- value 콜백 헤더 값
- type 콜백 이벤트 유형
🔽 오픈소스 분석 옵션
-
scaOptions
-
analysisSource
-
VCS
- url Git URL
필수string - branch 브랜치
string - commitId 커밋 ID
string - tag 태그
string - id VCS ID
string - password VCS 비밀번호
string - authToken VCS 토큰
string
Tip: url만 입력하는 경우 Git 저장소에 기본값으로 설정된 브랜치의 최신 커밋에 포함된 파일을 분석합니다.
- url Git URL
-
ObjectStorage
- endPoint 스토리지 엔드포인트
필수string - bucket 스토리지 버킷
필수string - object 스토리지 오브젝트 이름
필수string - accessKey 스토리지 액세스 키
string - secretKey 스토리지 시크릿 키
string
- endPoint 스토리지 엔드포인트
-
-
extensions 분석 대상 파일 확장자 목록
Tip: 다음 중 하나와 같이 입력하세요.
["java", "go"]["*"]압축 파일의 경우 압축 파일의 확장자가 분석 대상자에 해당하면 압축 파일 안에 있는 모든 파일이 분석에 포함됩니다.
-
excludedPath 분석 제외 경로
Tip: 대소문자를 구분하지 않으며
*를 사용할 수 있습니다.*AA*: AA가 포함된 모든 문자열과 일치AA*: AA로 시작하는 모든 문자열과 일치 다른 방법으로 분석 제외 경로를 설정하려는 경우 아래를 참고하세요.
-
maxSourceSize 최대 소스 크기
number소스코드 분석 또는 오픈소스 분석에서 검사할 분석 대상의 최대 크기입니다. 소스코드 분석 또는 오픈소스 분석을 수행하는 동안 내려받은 분석 대상의 크기가SOURCE_SIZE보다 크면 분석이 종료됩니다.1부터200사이의 정수를 입력할 수 있습니다.(단위: MB) -
sbomTypes SBOM 유형 목록 빈 목록의 경우 SBOM을 생성하지 않습니다. 다음과 같은 값을 입력할 수 있습니다.
- SPDX 2.2:
SPDX22(.spdx),SPDX22_JSON(.json),SPDX22_SPREADSHEET(.xlsx),SPDX22_RDF(.rdf) - SPDX 2.3:
SPDX23(.spdx),SPDX23_JSON(.json),SPDX23_SPREADSHEET(.xlsx),SPDX23_RDF(.rdf) - SPDX 3.0:
SPDX30_JSON(.json) - CycloneDX:
CycloneDX14,CycloneDX15,CycloneDX16(.json) - SWID:
SWID(.zip) - NIS SBOM:
NIS_CSV(.csv),NIS_PDF(.pdf),NIS_JSON(.json)
- SPDX 2.2:
-
sbomCreatorUsername SBOM 생성자
string -
sbomCreatorEmail SBOM 생성자 이메일
string
-
Tip: RequestInfo 객체를 반환합니다.
웹취약점 분석
import { getDastAnalysisRequest } from "@sparrowai/ondemand-node-sdk";
const dastRequest = getDastAnalysisRequest({
options : {
crawlerTargetSeedUrls : ['url'],
},
callbacks : [
{
url : 'url',
type : ['ANALYSIS_COMPLETE'],
headers : { key: 'key', value: 'value' }
}
]
})
const requestInfo = await client.doAnalysis(dastRequest);
- callbacks 콜백 목록
List- type 콜백 이벤트 유형
ANALYSIS_COMPLETE: 분석 종료 이벤트만 수신ANALYSIS_PROGRESS: 분석 종료를 제외한 분석 진행 이벤트를 수신SRC_UPLOAD: 소스 업로드
- url 콜백 URL
- headers 헤더 목록
- key 콜백 헤더 키
- value 콜백 헤더 값
- type 콜백 이벤트 유형
🔽 웹취약점 분석 옵션
-
targetUrl 분석 대상 URL
필수string -
commonRecordsLogin 로그인 기록 파일
stringTip: Sparrow Event Clipboard를 다운로드하고 로그인 과정을 파일로 저장해서 사용하세요.
-
crawlerTargetContainEntireSeed 하위 경로만 수집
boolean -
crawlerRequestAcceptLanguage 클라이언트 언어
Tip:
ko_KR과 같은 로케일 형식으로 입력하세요. -
crawlerCrawlMaxUrl 최대 수집 URL 수
numberTip: 수집할 수 있는 URL의 개수를 제한하지 않으려면 기본값인
0을 입력하세요. -
crawlerCrawlTimeout 최대 수집 시간
numberTip: 수집할 수 있는 시간을 제한하지 않으려면 기본값인
0을 입력하세요. -
analyzerAnalyzeTimeout 최대 분석 시간
numberTip: 분석할 수 있는 시간을 제한하지 않으려면 기본값인
0을 입력하세요. -
crawlerSkipUrl 제외할 수집 URL
string -
analyzerSkipUrl 제외할 분석 URL
string -
crawlerSkipUrlSuffix 제외할 URL 접미사
string -
crawlerExcludeCssSelector 이벤트 수행 제외 요소 (CSS 선택자)
-
crawlerIncludeCssSelector 이벤트 수행 추가 요소 (CSS 선택자)
-
crawlerExcludeXpath 이벤트 수행 제외 요소 (XPath)
-
crawlerIncludeXpath 이벤트 수행 추가 요소 (XPath)
-
crawlerRequestCustomHeaders 사용자 정의 HTTP 헤더
-
crawlerLimitUrlDepthDegree URL 수집 깊이
Tip:
high,medium,low으로 입력하세요. -
crawlerLimitDomDepthDegree DOM 수집 깊이
Tip:
high,medium,low으로 입력하세요. -
crawlerBrowserExplicitTimeout 이벤트 대기 시간
number -
crawlerRequestCountPerSecond HTTP 요청 횟수
numberTip: 전송할 수 있는 HTTP 요청의 개수를 제한하지 않으려면 기본값인
-1을 입력하세요. -
crawlerClientTimeout HTTP 클라이언트 대기 시간
number
Tip: RequestInfo 객체를 반환합니다.
상태 조회
요청 상태 조회
분석을 요청한 후 요청 상태를 확인할 수 있습니다.
const requestInfo = await client.getRequest(requestId: number)
- requestId 요청 ID
필수number
Tip: RequestInfo 객체를 반환합니다.
분석 상태 조회
분석이 시작된 후 분석 ID를 통해 분석 상태를 확인할 수 있습니다.
const analysisInfo = await client.getAnalysis(analysisId: number)
- analysisId 분석 ID
필수number
Tip: AnalysisInfo 객체를 반환합니다.
분석 결과 파일 다운로드
분석이 완료된 후에 분석 결과를 파일로 다운로드 받을 수 있습니다.
await client.downloadAnalysisResult(analysisId: number, filePath: string);
-
analysisId 분석 ID
필수number -
filePath 다운로드 경로
필수stringTip : 다운로드 경로에는 zip 확장자가 포함된 파일 이름을 입력하세요. /home/result.zip
분석 결과 읽어오기
분석이 완료되면 결과 파일을 다운로드하고 압축을 해제한 후에 도구별 Reader 객체를 통해 결과를 읽어올 수 있습니다.
공통 메소드
const resultReader = client.getAnalysiResultReader<T extends ResultReader>(analysisId: number ,filePath: string);
- ResultReader 분석 유형별 결과 읽어오기 객체
- SastResultReader 소스코드 분석 결과 읽어오기
- ScaResultReader 오픈소스 분석 결과 읽어오기
- DastResultReader 웹취약점 분석 결과 읽어오기
소스코드 분석 결과 읽어오기
import { SastResultReader } from "@sparrowai/ondemand-node-sdk/types";
// 1. SastResultReader 생성
const sastResultReader = await client.getAnalysiResultReader<SastResultReader>(analysisId: number ,filePath: string);
// 2. 분석 결과 요약 읽어오기
const sastSummary : SastSummary = sastResultReader.readSummary();
// 3. 분석 자산 목록 읽어오기
const assets : string[] = sastResultReader.readAsset();
// 4. 이슈 파일의 개수 반환하기
const size : number = sastResultReader.issueSize();
// 5. 이슈 파일에서 SastIssue 목록 반환하기
const sastIssues : SastIssue[] = sastResultReader.readIssue(index: number);
// 6. 작업 메시지에서 WorkMessage 목록 반환하기
const workMessages : WorkMessage[] = sastResultReader.readWorkMessage();
-
SastResultReader
- analysisId 분석 ID
필수number - filePath 다운로드 경로
필수string
- analysisId 분석 ID
-
readSummary 분석 결과 요약 읽어오기 메소드
-
readAsset 분석 자산 목록 읽어오기 메소드
Tip:
string[]을 반환합니다. -
issueSize 이슈 파일의 개수 반환하기 메소드
Tip:
number를 반환합니다. -
readIssue SastIssue 목록 반환하기 메소드
- index
Tip:
SastIssue[]를 반환하며 최대값은issueSize()메소드를 통해 확인할 수 있습니다.
- index
-
readWorkMessage WorkMessage 목록 반환하기 메소드
Tip:
WorkMessage[]를 반환합니다.
오픈소스 분석 결과 읽어오기
import { ScaResultReader, SbomType } from "@sparrowai/ondemand-node-sdk/types";
// 1. ScaResultReader 생성
const scaResultReader = await client.getAnalysiResultReader<ScaResultReader>(analysisId: number ,filePath: string);
// 2. 분석 결과 요약 읽어오기
const scaSummary : ScaSummary = scaResultReader.readSummary();
// 3. 분석 자산 목록 읽어오기
const assets : string[] = scaResultReader.readAsset();
// 4. 이슈 파일의 개수 반환하기
const size : number = scaResultReader.issueSize();
// 5. 이슈 파일에서 SastIssue 목록 반환하기
const scaComponents : ScaComponent[] = scaResultReader.readIssue(index: number);
// 6. 작업 메시지에서 WorkMessage 목록 반환하기
const workMessages : WorkMessage[] = scaResultReader.readWorkMessage();
// 7. SBOM 파일 경로 반환하기
const sbomPath : string = scaResultReader.getSbomPath(sbomType: SbomType);
// ex. const sbomPath : string = scaResultReader.getSbomPath(SbomType.SPDX22);
// 8. 라이선스 고지문 파일(HTML) 경로 반환하기
const path : string = scaResultReader.getLicenseNoticeHtmlPath();
// 9. 라이선스 고지문 파일(Markdown) 경로 반환하기
const path : string = scaResultReader.getLicenseNoticeMarkDownPath();
// 10. 라이선스 고지문 파일(Text) 경로 반환하기
const path : string = scaResultReader.getLicenseNoticeTextPath();
-
SastResultReader
- analysisId 분석 ID
필수number - filePath 다운로드 경로
필수string
- analysisId 분석 ID
-
readSummary 분석 결과 요약 읽어오기 메소드
-
readAsset 분석 자산 목록 읽어오기 메소드
Tip:
string[]을 반환합니다. -
issueSize 이슈 파일의 개수 반환하기 메소드
Tip:
number를 반환합니다. -
readIssue SastIssue 목록 반환하기 메소드
- index
Tip:
SastIssue[]를 반환하며 최대값은issueSize()메소드를 통해 확인할 수 있습니다.
- index
-
readWorkMessage WorkMessage 목록 반환하기 메소드
Tip:
WorkMessage[]를 반환합니다. -
getSbomPath SBOM 파일 경로 반환하기 메소드
- sbomType SBOM 타입
필수
Tip: SBOM 파일 경로 sbomPath를 반환합니다.
- sbomType SBOM 타입
-
getLicenseNoticeHtmlPath 라이선스 고지문 파일(HTML) 경로 반환하기 메소드
Tip: 라이선스 고지문 파일 경로 path를 반환합니다.
-
getLicenseNoticeMarkDownPath 라이선스 고지문 파일(Markdown) 경로 반환하기 메소드
Tip: 라이선스 고지문 파일 경로 path를 반환합니다.
-
getLicenseNoticeTextPath 라이선스 고지문 파일(Text) 경로 반환하기 메소드
Tip: 라이선스 고지문 파일 경로 path를 반환합니다.
웹취약점 분석 결과 읽어오기
import { DastResultReader } from "@sparrowai/ondemand-node-sdk/types";
// 1. DastResultReader 생성
const dastResultReader = await client.getAnalysiResultReader<DastResultReader>(analysisId: number ,filePath: string);
// 2. 분석 결과 요약 읽어오기
const dastSummary : DastSummary = dastResultReader.readSummary();
// 3. 분석 자산 목록 읽어오기
const assets : string[] = dastResultReader.readAsset();
// 4. 이슈 파일의 개수 반환하기
const size : number = dastResultReader.issueSize();
// 5. 이슈 파일에서 SastIssue 목록 반환하기
const dastIssues : DastIssue[] = dastResultReader.readIssue(index: number);
// 6. 작업 메시지에서 WorkMessage 목록 반환하기
const workMessages : WorkMessage[] = dastResultReader.readWorkMessage();
-
SastResultReader
- analysisId 분석 ID
필수number - filePath 다운로드 경로
필수string
- analysisId 분석 ID
-
readSummary 분석 결과 요약 읽어오기 메소드
-
readAsset 분석 자산 목록 읽어오기 메소드
Tip:
string[]을 반환합니다. -
issueSize 이슈 파일의 개수 반환하기 메소드
Tip:
number를 반환합니다. -
readIssue SastIssue 목록 반환하기 메소드
- index
Tip:
SastIssue[]를 반환하며 최대값은issueSize()메소드를 통해 확인할 수 있습니다.
- index
-
readWorkMessage WorkMessage 목록 반환하기 메소드
Tip:
WorkMessage[]를 반환합니다.
분석 중지
진행 중인 분석을 중지할 수 있습니다.
await client.stopAnalysis(analysisId: number);
- analysisId 분석 ID
필수number
Tip: 아무 것도 반환하지 않습니다.
예외 처리
초기화에서 생성한 OndemandNodeClient 인스턴스의 메소드를 호출하여 분석을 수행할 수 있습니다. 메소드를 실행할 때 OndemandException이 발생한 경우 의미와 처리 방법은 아래를 참고하세요. OndemandException은 RuntimeException을 통해 예외를 전달하며 두가지로 분류됩니다.
- OndmandClientException
클라이언트에서 Sparrow On-Demand에 요청을 보내거나 Sparrow On-Demand에서 응답을 처리할 때 발생할 수 있습니다.
- resultCode 결과 코드
string예외 발생 원인에 따라 다른 코드가 표시됩니다. 자세한 내용은 결과 코드를 참고하세요. - message 메시지
string예외 발생 원인에 대한 메시지입니다.
- resultCode 결과 코드
- OndmandServerException
Sparrow On-Demand에서 성공적으로 요청을 받았지만 처리하지 못한 경우 발생합니다.
- resultCode 결과 코드
string예외 발생 원인에 따라 다른 코드가 표시됩니다. 자세한 내용은 결과 코드를 참고하세요. - message 메시지
string예외 발생 원인에 대한 메시지입니다. - statusCode 상태 코드
number응답 상태 코드를 나타냅니다. - validationErrors 유효성 오류 메시지
string요청에 대한 유효성 검증에 실패한 경우 서버에서 반환되는 메시지입니다.
- resultCode 결과 코드
객체 정보
RequestInfo
- requestId 요청 ID
number - result 요청 결과
string분석이 종료된 결과이며 다음과 같은 값을 가집니다.SUCCESS: 분석이 성공적으로 완료된 상태FAIL: 분석을 올바르게 완료하지 못하고 실패한 상태STOP: 중지 요청을 받아 분석이 중지된 상태
- analysisList 분석 목록
AnalysisInfo[]Tip: AnalysisInfo 객체의 목록입니다.
AnalysisInfo
- analysisId 분석 ID
number - requestId 요청 ID
number - status 분석 상태
string
분석이 진행되는 단계에 따른 상태이며 다음 중 하나로 표시됩니다.STOP_PROCESS: 중지 요청을 받고 분석을 중지하는 중INIT: 분석 수행을 위해 환경을 준비하는 중READY: 환경이 구성되고 분석 대상을 준비하는 중PRE_PROCESS: 분석을 위해 분석 대상을 전처리하는 중ANALYSIS: 분석을 수행하는 중POST_PROCESS: 분석이 끝나고 결과를 처리하는 중COMPLETE: 분석이 종료된 상태
- toolType 분석 유형
string - memo 메모
string