diff --git a/src/commands/repos/cmd-repos-create.ts b/src/commands/repos/cmd-repos-create.ts index f3093bf81..ca115b5c7 100644 --- a/src/commands/repos/cmd-repos-create.ts +++ b/src/commands/repos/cmd-repos-create.ts @@ -3,7 +3,7 @@ import colors from 'yoctocolors-cjs' import { logger } from '@socketsecurity/registry/lib/logger' -import { createRepo } from './create-repo' +import { handleCreateRepo } from './handle-create-repo' import constants from '../../constants' import { commonFlags } from '../../flags' import { meowOrExit } from '../../utils/meow-with-subcommands' @@ -101,7 +101,7 @@ async function run( return } - await createRepo({ + await handleCreateRepo({ orgSlug, repoName, description: String(cli.flags['repoDescription'] || ''), diff --git a/src/commands/repos/cmd-repos-del.ts b/src/commands/repos/cmd-repos-del.ts index ed9279050..46f50c70d 100644 --- a/src/commands/repos/cmd-repos-del.ts +++ b/src/commands/repos/cmd-repos-del.ts @@ -3,7 +3,7 @@ import colors from 'yoctocolors-cjs' import { logger } from '@socketsecurity/registry/lib/logger' -import { deleteRepo } from './delete-repo' +import { handleDeleteRepo } from './handle-delete-repo' import constants from '../../constants' import { commonFlags } from '../../flags' import { meowOrExit } from '../../utils/meow-with-subcommands' @@ -72,5 +72,5 @@ async function run( return } - await deleteRepo(orgSlug, repoName) + await handleDeleteRepo(orgSlug, repoName) } diff --git a/src/commands/repos/cmd-repos-list.ts b/src/commands/repos/cmd-repos-list.ts index 6170c5ca1..5cc573e21 100644 --- a/src/commands/repos/cmd-repos-list.ts +++ b/src/commands/repos/cmd-repos-list.ts @@ -3,7 +3,7 @@ import colors from 'yoctocolors-cjs' import { logger } from '@socketsecurity/registry/lib/logger' -import { listRepos } from './list-repos' +import { handleListRepos } from './handle-list-repos' import constants from '../../constants' import { commonFlags, outputFlags } from '../../flags' import { meowOrExit } from '../../utils/meow-with-subcommands' @@ -94,7 +94,7 @@ async function run( return } - await listRepos({ + await handleListRepos({ direction: cli.flags['direction'] === 'asc' ? 'asc' : 'desc', orgSlug, outputKind: cli.flags['json'] diff --git a/src/commands/repos/cmd-repos-update.ts b/src/commands/repos/cmd-repos-update.ts index e55d553ee..7460894a7 100644 --- a/src/commands/repos/cmd-repos-update.ts +++ b/src/commands/repos/cmd-repos-update.ts @@ -3,7 +3,7 @@ import colors from 'yoctocolors-cjs' import { logger } from '@socketsecurity/registry/lib/logger' -import { updateRepo } from './update-repo' +import { handleUpdateRepo } from './handle-update-repo' import constants from '../../constants' import { commonFlags } from '../../flags' import { meowOrExit } from '../../utils/meow-with-subcommands' @@ -103,7 +103,7 @@ async function run( return } - await updateRepo({ + await handleUpdateRepo({ orgSlug, repoName, description: String(cli.flags['repoDescription'] || ''), diff --git a/src/commands/repos/cmd-repos-view.ts b/src/commands/repos/cmd-repos-view.ts index 4cc4de270..f0833c160 100644 --- a/src/commands/repos/cmd-repos-view.ts +++ b/src/commands/repos/cmd-repos-view.ts @@ -3,7 +3,7 @@ import colors from 'yoctocolors-cjs' import { logger } from '@socketsecurity/registry/lib/logger' -import { viewRepo } from './view-repo' +import { handleViewRepo } from './handle-view-repo' import constants from '../../constants' import { commonFlags, outputFlags } from '../../flags' import { meowOrExit } from '../../utils/meow-with-subcommands' @@ -56,7 +56,8 @@ async function run( parentName }) - const repoName = cli.flags['repoName'] + const { json, markdown, repoName } = cli.flags + const [orgSlug = ''] = cli.input if (!repoName || typeof repoName !== 'string' || !orgSlug) { @@ -89,9 +90,9 @@ async function run( return } - await viewRepo( + await handleViewRepo( orgSlug, repoName, - cli.flags['json'] ? 'json' : cli.flags['markdown'] ? 'markdown' : 'print' + json ? 'json' : markdown ? 'markdown' : 'text' ) } diff --git a/src/commands/repos/create-repo.ts b/src/commands/repos/fetch-create-repo.ts similarity index 60% rename from src/commands/repos/create-repo.ts rename to src/commands/repos/fetch-create-repo.ts index f2d5c7f28..61daaac34 100644 --- a/src/commands/repos/create-repo.ts +++ b/src/commands/repos/fetch-create-repo.ts @@ -3,7 +3,9 @@ import { handleApiCall, handleUnsuccessfulApiResponse } from '../../utils/api' import { AuthError } from '../../utils/errors' import { getDefaultToken, setupSdk } from '../../utils/sdk' -export async function createRepo({ +import type { SocketSdkReturnType } from '@socketsecurity/sdk' + +export async function fetchCreateRepo({ default_branch, description, homepage, @@ -17,7 +19,7 @@ export async function createRepo({ homepage: string default_branch: string visibility: string -}): Promise { +}): Promise['data'] | undefined> { const apiToken = getDefaultToken() if (!apiToken) { throw new AuthError( @@ -25,8 +27,7 @@ export async function createRepo({ ) } - await createRepoWithToken({ - apiToken, + return await fetchCreateRepoWithToken(apiToken, { default_branch, description, homepage, @@ -36,29 +37,31 @@ export async function createRepo({ }) } -async function createRepoWithToken({ - apiToken, - default_branch, - description, - homepage, - orgSlug, - repoName, - visibility -}: { - apiToken: string - orgSlug: string - repoName: string - description: string - homepage: string - default_branch: string - visibility: string -}): Promise { +async function fetchCreateRepoWithToken( + apiToken: string, + { + default_branch, + description, + homepage, + orgSlug, + repoName, + visibility + }: { + orgSlug: string + repoName: string + description: string + homepage: string + default_branch: string + visibility: string + } +): Promise['data'] | undefined> { // Lazily access constants.spinner. const { spinner } = constants - spinner.start('Creating repository...') - const socketSdk = await setupSdk(apiToken) + + spinner.start('Sending request ot create a repository...') + const result = await handleApiCall( socketSdk.createOrgRepo(orgSlug, { name: repoName, @@ -70,10 +73,12 @@ async function createRepoWithToken({ 'creating repository' ) + spinner.successAndStop('Received response requesting to create a repository.') + if (!result.success) { handleUnsuccessfulApiResponse('createOrgRepo', result) return } - spinner.successAndStop('Repository created successfully') + return result.data } diff --git a/src/commands/repos/fetch-delete-repo.ts b/src/commands/repos/fetch-delete-repo.ts new file mode 100644 index 000000000..5149e6b52 --- /dev/null +++ b/src/commands/repos/fetch-delete-repo.ts @@ -0,0 +1,47 @@ +import constants from '../../constants' +import { handleApiCall, handleUnsuccessfulApiResponse } from '../../utils/api' +import { AuthError } from '../../utils/errors' +import { getDefaultToken, setupSdk } from '../../utils/sdk' + +import type { SocketSdkReturnType } from '@socketsecurity/sdk' + +export async function fetchDeleteRepo( + orgSlug: string, + repoName: string +): Promise['data'] | undefined> { + const apiToken = getDefaultToken() + if (!apiToken) { + throw new AuthError( + 'User must be authenticated to run this command. To log in, run the command `socket login` and enter your API key.' + ) + } + + return await fetchDeleteRepoWithToken(orgSlug, repoName, apiToken) +} + +async function fetchDeleteRepoWithToken( + orgSlug: string, + repoName: string, + apiToken: string +): Promise['data'] | undefined> { + // Lazily access constants.spinner. + const { spinner } = constants + + const socketSdk = await setupSdk(apiToken) + + spinner.start('Sending request to delete a repository...') + + const result = await handleApiCall( + socketSdk.deleteOrgRepo(orgSlug, repoName), + 'deleting repository' + ) + + spinner.successAndStop('Received response requesting to delete a repository.') + + if (!result.success) { + handleUnsuccessfulApiResponse('deleteOrgRepo', result) + return + } + + return result.data +} diff --git a/src/commands/repos/fetch-list-repos.ts b/src/commands/repos/fetch-list-repos.ts new file mode 100644 index 000000000..2b2d57569 --- /dev/null +++ b/src/commands/repos/fetch-list-repos.ts @@ -0,0 +1,78 @@ +import constants from '../../constants' +import { handleApiCall, handleUnsuccessfulApiResponse } from '../../utils/api' +import { AuthError } from '../../utils/errors' +import { getDefaultToken, setupSdk } from '../../utils/sdk' + +import type { SocketSdkReturnType } from '@socketsecurity/sdk' + +export async function fetchListRepos({ + direction, + orgSlug, + page, + per_page, + sort +}: { + direction: string + orgSlug: string + page: number + per_page: number + sort: string +}): Promise['data'] | undefined> { + const apiToken = getDefaultToken() + if (!apiToken) { + throw new AuthError( + 'User must be authenticated to run this command. To log in, run the command `socket login` and enter your API key.' + ) + } + + return await fetchListReposWithToken(apiToken, { + direction, + orgSlug, + page, + per_page, + sort + }) +} + +async function fetchListReposWithToken( + apiToken: string, + { + direction, + orgSlug, + page, + per_page, + sort + }: { + direction: string + orgSlug: string + page: number + per_page: number + sort: string + } +): Promise['data'] | undefined> { + // Lazily access constants.spinner. + const { spinner } = constants + + const socketSdk = await setupSdk(apiToken) + + spinner.start('Fetching list of repositories...') + + const result = await handleApiCall( + socketSdk.getOrgRepoList(orgSlug, { + sort, + direction, + per_page: String(per_page), + page: String(page) + }), + 'listing repositories' + ) + + spinner.successAndStop('Received response for repository list.') + + if (!result.success) { + handleUnsuccessfulApiResponse('getOrgRepoList', result) + return + } + + return result.data +} diff --git a/src/commands/repos/update-repo.ts b/src/commands/repos/fetch-update-repo.ts similarity index 61% rename from src/commands/repos/update-repo.ts rename to src/commands/repos/fetch-update-repo.ts index f06916b5d..42ebdfc26 100644 --- a/src/commands/repos/update-repo.ts +++ b/src/commands/repos/fetch-update-repo.ts @@ -3,7 +3,9 @@ import { handleApiCall, handleUnsuccessfulApiResponse } from '../../utils/api' import { AuthError } from '../../utils/errors' import { getDefaultToken, setupSdk } from '../../utils/sdk' -export async function updateRepo({ +import type { SocketSdkReturnType } from '@socketsecurity/sdk' + +export async function fetchUpdateRepo({ default_branch, description, homepage, @@ -17,7 +19,7 @@ export async function updateRepo({ homepage: string default_branch: string visibility: string -}): Promise { +}): Promise['data'] | undefined> { const apiToken = getDefaultToken() if (!apiToken) { throw new AuthError( @@ -25,8 +27,7 @@ export async function updateRepo({ ) } - await updateRepoWithToken({ - apiToken, + return await fetchUpdateRepoWithToken(apiToken, { default_branch, description, homepage, @@ -36,27 +37,28 @@ export async function updateRepo({ }) } -async function updateRepoWithToken({ - apiToken, - default_branch, - description, - homepage, - orgSlug, - repoName, - visibility -}: { - apiToken: string - orgSlug: string - repoName: string - description: string - homepage: string - default_branch: string - visibility: string -}): Promise { +async function fetchUpdateRepoWithToken( + apiToken: string, + { + default_branch, + description, + homepage, + orgSlug, + repoName, + visibility + }: { + orgSlug: string + repoName: string + description: string + homepage: string + default_branch: string + visibility: string + } +): Promise['data'] | undefined> { // Lazily access constants.spinner. const { spinner } = constants - spinner.start('Updating repository...') + spinner.start('Sending request to update a repository...') const socketSdk = await setupSdk(apiToken) const result = await handleApiCall( @@ -71,10 +73,12 @@ async function updateRepoWithToken({ 'updating repository' ) + spinner.successAndStop('Received response trying to update a repository') + if (!result.success) { handleUnsuccessfulApiResponse('updateOrgRepo', result) return } - spinner.successAndStop('Repository updated successfully') + return result.data } diff --git a/src/commands/repos/fetch-view-repo.ts b/src/commands/repos/fetch-view-repo.ts new file mode 100644 index 000000000..3983e8dbb --- /dev/null +++ b/src/commands/repos/fetch-view-repo.ts @@ -0,0 +1,46 @@ +import constants from '../../constants' +import { handleApiCall, handleUnsuccessfulApiResponse } from '../../utils/api' +import { AuthError } from '../../utils/errors' +import { getDefaultToken, setupSdk } from '../../utils/sdk' + +import type { SocketSdkReturnType } from '@socketsecurity/sdk' + +export async function fetchViewRepo( + orgSlug: string, + repoName: string +): Promise['data'] | undefined> { + const apiToken = getDefaultToken() + if (!apiToken) { + throw new AuthError( + 'User must be authenticated to run this command. To log in, run the command `socket login` and enter your API key.' + ) + } + return await fetchViewRepoWithToken(orgSlug, repoName, apiToken) +} + +async function fetchViewRepoWithToken( + orgSlug: string, + repoName: string, + apiToken: string +): Promise['data'] | undefined> { + // Lazily access constants.spinner. + const { spinner } = constants + + const socketSdk = await setupSdk(apiToken) + + spinner.start('Fetching repository data...') + + const result = await handleApiCall( + socketSdk.getOrgRepo(orgSlug, repoName), + 'fetching repository' + ) + + spinner.successAndStop('Received response while fetched repository data.') + + if (!result.success) { + handleUnsuccessfulApiResponse('getOrgRepo', result) + return + } + + return result.data +} diff --git a/src/commands/repos/handle-create-repo.ts b/src/commands/repos/handle-create-repo.ts new file mode 100644 index 000000000..5773ab375 --- /dev/null +++ b/src/commands/repos/handle-create-repo.ts @@ -0,0 +1,30 @@ +import { fetchCreateRepo } from './fetch-create-repo' +import { outputCreateRepo } from './output-create-repo' + +export async function handleCreateRepo({ + default_branch, + description, + homepage, + orgSlug, + repoName, + visibility +}: { + orgSlug: string + repoName: string + description: string + homepage: string + default_branch: string + visibility: string +}): Promise { + const data = await fetchCreateRepo({ + default_branch, + description, + homepage, + orgSlug, + repoName, + visibility + }) + if (!data) return + + await outputCreateRepo(data) +} diff --git a/src/commands/repos/delete-repo.ts b/src/commands/repos/handle-delete-repo.ts similarity index 96% rename from src/commands/repos/delete-repo.ts rename to src/commands/repos/handle-delete-repo.ts index 544620da3..6663921d3 100644 --- a/src/commands/repos/delete-repo.ts +++ b/src/commands/repos/handle-delete-repo.ts @@ -3,7 +3,7 @@ import { handleApiCall, handleUnsuccessfulApiResponse } from '../../utils/api' import { AuthError } from '../../utils/errors' import { getDefaultToken, setupSdk } from '../../utils/sdk' -export async function deleteRepo( +export async function handleDeleteRepo( orgSlug: string, repoName: string ): Promise { diff --git a/src/commands/repos/handle-list-repos.ts b/src/commands/repos/handle-list-repos.ts new file mode 100644 index 000000000..8ef3ec3a7 --- /dev/null +++ b/src/commands/repos/handle-list-repos.ts @@ -0,0 +1,29 @@ +import { fetchListRepos } from './fetch-list-repos' +import { outputListRepos } from './output-list-repos' + +export async function handleListRepos({ + direction, + orgSlug, + outputKind, + page, + per_page, + sort +}: { + direction: string + orgSlug: string + outputKind: 'json' | 'markdown' | 'print' + page: number + per_page: number + sort: string +}): Promise { + const data = await fetchListRepos({ + direction, + orgSlug, + page, + per_page, + sort + }) + if (!data) return + + await outputListRepos(data, outputKind) +} diff --git a/src/commands/repos/handle-update-repo.ts b/src/commands/repos/handle-update-repo.ts new file mode 100644 index 000000000..8150f5f23 --- /dev/null +++ b/src/commands/repos/handle-update-repo.ts @@ -0,0 +1,30 @@ +import { fetchUpdateRepo } from './fetch-update-repo' +import { outputUpdateRepo } from './output-update-repo' + +export async function handleUpdateRepo({ + default_branch, + description, + homepage, + orgSlug, + repoName, + visibility +}: { + orgSlug: string + repoName: string + description: string + homepage: string + default_branch: string + visibility: string +}): Promise { + const data = await fetchUpdateRepo({ + default_branch, + description, + homepage, + orgSlug, + repoName, + visibility + }) + if (!data) return + + await outputUpdateRepo(data) +} diff --git a/src/commands/repos/handle-view-repo.ts b/src/commands/repos/handle-view-repo.ts new file mode 100644 index 000000000..d24590a57 --- /dev/null +++ b/src/commands/repos/handle-view-repo.ts @@ -0,0 +1,13 @@ +import { fetchViewRepo } from './fetch-view-repo' +import { outputViewRepo } from './output-view-repo' + +export async function handleViewRepo( + orgSlug: string, + repoName: string, + outputKind: 'json' | 'markdown' | 'text' +): Promise { + const data = await fetchViewRepo(orgSlug, repoName) + if (!data) return + + await outputViewRepo(data, outputKind) +} diff --git a/src/commands/repos/list-repos.ts b/src/commands/repos/list-repos.ts deleted file mode 100644 index 277a87701..000000000 --- a/src/commands/repos/list-repos.ts +++ /dev/null @@ -1,108 +0,0 @@ -// @ts-ignore -import chalkTable from 'chalk-table' -import colors from 'yoctocolors-cjs' - -import { logger } from '@socketsecurity/registry/lib/logger' - -import constants from '../../constants' -import { handleApiCall, handleUnsuccessfulApiResponse } from '../../utils/api' -import { AuthError } from '../../utils/errors' -import { getDefaultToken, setupSdk } from '../../utils/sdk' - -export async function listRepos({ - direction, - orgSlug, - outputKind, - page, - per_page, - sort -}: { - direction: string - orgSlug: string - outputKind: 'json' | 'markdown' | 'print' - page: number - per_page: number - sort: string -}): Promise { - const apiToken = getDefaultToken() - if (!apiToken) { - throw new AuthError( - 'User must be authenticated to run this command. To log in, run the command `socket login` and enter your API key.' - ) - } - - await listReposWithToken({ - apiToken, - direction, - orgSlug, - outputKind, - page, - per_page, - sort - }) -} - -async function listReposWithToken({ - apiToken, - direction, - orgSlug, - outputKind, - page, - per_page, - sort -}: { - apiToken: string - direction: string - orgSlug: string - outputKind: 'json' | 'markdown' | 'print' - page: number - per_page: number - sort: string -}): Promise { - // Lazily access constants.spinner. - const { spinner } = constants - - spinner.start('Fetching list of repositories...') - - const socketSdk = await setupSdk(apiToken) - const result = await handleApiCall( - socketSdk.getOrgRepoList(orgSlug, { - sort, - direction, - per_page: String(per_page), - page: String(page) - }), - 'listing repositories' - ) - - if (!result.success) { - handleUnsuccessfulApiResponse('getOrgRepoList', result) - return - } - - spinner.stop('Fetch complete.') - - if (outputKind === 'json') { - const data = result.data.results.map(o => ({ - id: o.id, - name: o.name, - visibility: o.visibility, - defaultBranch: o.default_branch, - archived: o.archived - })) - logger.log(JSON.stringify(data, null, 2)) - return - } - - const options = { - columns: [ - { field: 'id', name: colors.magenta('ID') }, - { field: 'name', name: colors.magenta('Name') }, - { field: 'visibility', name: colors.magenta('Visibility') }, - { field: 'default_branch', name: colors.magenta('Default branch') }, - { field: 'archived', name: colors.magenta('Archived') } - ] - } - - logger.log(chalkTable(options, result.data.results)) -} diff --git a/src/commands/repos/output-create-repo.ts b/src/commands/repos/output-create-repo.ts new file mode 100644 index 000000000..9937ae832 --- /dev/null +++ b/src/commands/repos/output-create-repo.ts @@ -0,0 +1,8 @@ +import { logger } from '@socketsecurity/registry/lib/logger' + +import type { SocketSdkReturnType } from '@socketsecurity/sdk' +export async function outputCreateRepo( + _data: SocketSdkReturnType<'createOrgRepo'>['data'] +): Promise { + logger.success('Repository created successfully') +} diff --git a/src/commands/repos/output-delete-repo.ts b/src/commands/repos/output-delete-repo.ts new file mode 100644 index 000000000..1cd8da2f0 --- /dev/null +++ b/src/commands/repos/output-delete-repo.ts @@ -0,0 +1,8 @@ +import { logger } from '@socketsecurity/registry/lib/logger' + +import type { SocketSdkReturnType } from '@socketsecurity/sdk' +export async function handleDeleteRepo( + _data: SocketSdkReturnType<'deleteOrgRepo'>['data'] +): Promise { + logger.success('Repository deleted successfully') +} diff --git a/src/commands/repos/output-list-repos.ts b/src/commands/repos/output-list-repos.ts new file mode 100644 index 000000000..7c8ab8820 --- /dev/null +++ b/src/commands/repos/output-list-repos.ts @@ -0,0 +1,36 @@ +// @ts-ignore +import chalkTable from 'chalk-table' +import colors from 'yoctocolors-cjs' + +import { logger } from '@socketsecurity/registry/lib/logger' + +import type { SocketSdkReturnType } from '@socketsecurity/sdk' + +export async function outputListRepos( + data: SocketSdkReturnType<'getOrgRepoList'>['data'], + outputKind: 'json' | 'markdown' | 'print' +): Promise { + if (outputKind === 'json') { + const json = data.results.map(o => ({ + id: o.id, + name: o.name, + visibility: o.visibility, + defaultBranch: o.default_branch, + archived: o.archived + })) + logger.log(JSON.stringify(json, null, 2)) + return + } + + const options = { + columns: [ + { field: 'id', name: colors.magenta('ID') }, + { field: 'name', name: colors.magenta('Name') }, + { field: 'visibility', name: colors.magenta('Visibility') }, + { field: 'default_branch', name: colors.magenta('Default branch') }, + { field: 'archived', name: colors.magenta('Archived') } + ] + } + + logger.log(chalkTable(options, data.results)) +} diff --git a/src/commands/repos/output-update-repo.ts b/src/commands/repos/output-update-repo.ts new file mode 100644 index 000000000..937a3fdd2 --- /dev/null +++ b/src/commands/repos/output-update-repo.ts @@ -0,0 +1,9 @@ +import { logger } from '@socketsecurity/registry/lib/logger' + +import type { SocketSdkReturnType } from '@socketsecurity/sdk' + +export async function outputUpdateRepo( + _data: SocketSdkReturnType<'updateOrgRepo'>['data'] +): Promise { + logger.success('Repository updated successfully') +} diff --git a/src/commands/repos/output-view-repo.ts b/src/commands/repos/output-view-repo.ts new file mode 100644 index 000000000..e405436a9 --- /dev/null +++ b/src/commands/repos/output-view-repo.ts @@ -0,0 +1,54 @@ +// @ts-ignore +import chalkTable from 'chalk-table' +import colors from 'yoctocolors-cjs' + +import { logger } from '@socketsecurity/registry/lib/logger' + +import type { SocketSdkReturnType } from '@socketsecurity/sdk' + +export async function outputViewRepo( + data: SocketSdkReturnType<'createOrgRepo'>['data'], + outputKind: 'json' | 'markdown' | 'text' +): Promise { + if (outputKind === 'json') { + const { + archived, + created_at, + default_branch, + homepage, + id, + name, + visibility + } = data + logger.log( + JSON.stringify( + { + id, + name, + visibility, + default_branch, + homepage, + archived, + created_at + }, + null, + 2 + ) + ) + return + } + + const options = { + columns: [ + { field: 'id', name: colors.magenta('ID') }, + { field: 'name', name: colors.magenta('Name') }, + { field: 'visibility', name: colors.magenta('Visibility') }, + { field: 'default_branch', name: colors.magenta('Default branch') }, + { field: 'homepage', name: colors.magenta('Homepage') }, + { field: 'archived', name: colors.magenta('Archived') }, + { field: 'created_at', name: colors.magenta('Created at') } + ] + } + + logger.log(chalkTable(options, [data])) +} diff --git a/src/commands/repos/view-repo.ts b/src/commands/repos/view-repo.ts deleted file mode 100644 index 3757df6e6..000000000 --- a/src/commands/repos/view-repo.ts +++ /dev/null @@ -1,91 +0,0 @@ -// @ts-ignore -import chalkTable from 'chalk-table' -import colors from 'yoctocolors-cjs' - -import { logger } from '@socketsecurity/registry/lib/logger' - -import constants from '../../constants' -import { handleApiCall, handleUnsuccessfulApiResponse } from '../../utils/api' -import { AuthError } from '../../utils/errors' -import { getDefaultToken, setupSdk } from '../../utils/sdk' - -export async function viewRepo( - orgSlug: string, - repoName: string, - outputKind: 'json' | 'markdown' | 'print' -): Promise { - const apiToken = getDefaultToken() - if (!apiToken) { - throw new AuthError( - 'User must be authenticated to run this command. To log in, run the command `socket login` and enter your API key.' - ) - } - await viewRepoWithToken(orgSlug, repoName, apiToken, outputKind) -} - -async function viewRepoWithToken( - orgSlug: string, - repoName: string, - apiToken: string, - outputKind: 'json' | 'markdown' | 'print' -): Promise { - // Lazily access constants.spinner. - const { spinner } = constants - - spinner.start('Fetching repository data...') - - const socketSdk = await setupSdk(apiToken) - const result = await handleApiCall( - socketSdk.getOrgRepo(orgSlug, repoName), - 'fetching repository' - ) - - if (!result.success) { - handleUnsuccessfulApiResponse('getOrgRepo', result) - return - } - - spinner.stop('Fetched repository data.') - - if (outputKind === 'json') { - const { - archived, - created_at, - default_branch, - homepage, - id, - name, - visibility - } = result.data - logger.log( - JSON.stringify( - { - id, - name, - visibility, - default_branch, - homepage, - archived, - created_at - }, - null, - 2 - ) - ) - return - } - - const options = { - columns: [ - { field: 'id', name: colors.magenta('ID') }, - { field: 'name', name: colors.magenta('Name') }, - { field: 'visibility', name: colors.magenta('Visibility') }, - { field: 'default_branch', name: colors.magenta('Default branch') }, - { field: 'homepage', name: colors.magenta('Homepage') }, - { field: 'archived', name: colors.magenta('Archived') }, - { field: 'created_at', name: colors.magenta('Created at') } - ] - } - - logger.log(chalkTable(options, [result.data])) -}