Skip to content

Commit edcf3ab

Browse files
Merge pull request #180 from SocketDev/cg/exposeFullScansAPI
Add full scans feature
2 parents 1a504aa + 5ea1760 commit edcf3ab

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed

index.js

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,121 @@ class SocketSdk {
259259
}
260260
}
261261

262+
/**
263+
* @param {string} orgSlug
264+
* @returns {Promise<SocketSdkResultType<'getOrgFullScanList'>>}
265+
*/
266+
async getOrgFullScanList (orgSlug) {
267+
const orgSlugParam = encodeURIComponent(orgSlug)
268+
269+
try {
270+
const client = await this.#getClient()
271+
const data = await client.get(`orgs/${orgSlugParam}/full-scans`).json()
272+
return { success: true, status: 200, data }
273+
} catch (err) {
274+
return /** @type {SocketSdkErrorType<'getOrgFullScanList'>} */ (this.#handleApiError(err))
275+
}
276+
}
277+
278+
/**
279+
* @param {string} orgSlug
280+
* @param {string} fullScanId
281+
* @returns {Promise<SocketSdkResultType<'getOrgFullScan'>>}
282+
*/
283+
async getOrgFullScan (orgSlug, fullScanId) {
284+
const orgSlugParam = encodeURIComponent(orgSlug)
285+
const fullScanIdParam = encodeURIComponent(fullScanId)
286+
287+
try {
288+
const client = await this.#getClient()
289+
const readStream = await client.stream(`orgs/${orgSlugParam}/full-scans/${fullScanIdParam}`).pipe(process.stdout)
290+
291+
return { success: true, status: 200, data: readStream }
292+
} catch (err) {
293+
return /** @type {SocketSdkErrorType<'getOrgFullScan'>} */ (this.#handleApiError(err))
294+
}
295+
}
296+
297+
/**
298+
* @param {string} orgSlug
299+
* @param {string} fullScanId
300+
* @returns {Promise<SocketSdkResultType<'getOrgFullScanMetadata'>>}
301+
*/
302+
async getOrgFullScanMetadata (orgSlug, fullScanId) {
303+
const orgSlugParam = encodeURIComponent(orgSlug)
304+
const fullScanIdParam = encodeURIComponent(fullScanId)
305+
306+
try {
307+
const client = await this.#getClient()
308+
const data = await client.get(`orgs/${orgSlugParam}/full-scans/${fullScanIdParam}/metadata`).json()
309+
return { success: true, status: 200, data }
310+
} catch (err) {
311+
return /** @type {SocketSdkErrorType<'getOrgFullScanMetadata'>} */ (this.#handleApiError(err))
312+
}
313+
}
314+
315+
/**
316+
* @param {string} orgSlug
317+
* @param {string} fullScanId
318+
* @returns {Promise<SocketSdkResultType<'deleteOrgFullScan'>>}
319+
*/
320+
async deleteOrgFullScan (orgSlug, fullScanId) {
321+
const orgSlugParam = encodeURIComponent(orgSlug)
322+
const fullScanIdParam = encodeURIComponent(fullScanId)
323+
324+
try {
325+
const client = await this.#getClient()
326+
const data = await client.delete(`orgs/${orgSlugParam}/full-scans/${fullScanIdParam}`).json()
327+
return { success: true, status: 200, data }
328+
} catch (err) {
329+
return /** @type {SocketSdkErrorType<'deleteOrgFullScan'>} */ (this.#handleApiError(err))
330+
}
331+
}
332+
333+
/**
334+
* @param {string} orgSlug
335+
* @param {{[key: string]: any }} queryParams
336+
* @param {string[]} filePaths
337+
* @param {string} pathsRelativeTo
338+
* @returns {Promise<SocketSdkResultType<'CreateOrgFullScan'>>}
339+
*/
340+
async createOrgFullScan (orgSlug, queryParams, filePaths, pathsRelativeTo = '.') {
341+
const basePath = path.resolve(process.cwd(), pathsRelativeTo)
342+
const absoluteFilePaths = filePaths.map(filePath => path.resolve(basePath, filePath))
343+
const orgSlugParam = encodeURIComponent(orgSlug)
344+
const formattedQueryParams = new URLSearchParams(queryParams)
345+
346+
const [
347+
{ FormData },
348+
{ fileFromPath },
349+
client
350+
] = await Promise.all([
351+
import('formdata-node'),
352+
import('formdata-node/file-from-path'),
353+
this.#getClient(),
354+
])
355+
356+
const body = new FormData()
357+
358+
const files = await Promise.all(absoluteFilePaths.map(absoluteFilePath => fileFromPath(absoluteFilePath)))
359+
360+
for (let i = 0, length = files.length; i < length; i++) {
361+
const absoluteFilePath = absoluteFilePaths[i]
362+
if (absoluteFilePath) {
363+
const relativeFilePath = path.relative(basePath, absoluteFilePath)
364+
body.set(relativeFilePath, files[i])
365+
}
366+
}
367+
368+
try {
369+
const data = await client.post(`orgs/${orgSlugParam}/full-scans?${formattedQueryParams}`, { body }).json()
370+
371+
return { success: true, status: 200, data }
372+
} catch (err) {
373+
return /** @type {SocketSdkErrorType<'CreateOrgFullScan'>} */ (this.#handleApiError(err))
374+
}
375+
}
376+
262377
/**
263378
* @param {Array<{ organization?: string }>} selectors
264379
* @returns {Promise<SocketSdkResultType<'postSettings'>>}

0 commit comments

Comments
 (0)