@keyshade/cli
Version:
120 lines (103 loc) โข 3.11 kB
text/typescript
import BaseCommand from '@/commands/base.command'
import {
type CommandActionData,
type CommandOption
} from '@/types/command/command.types'
import ControllerInstance from '@/util/controller-instance'
import { log, spinner } from '@clack/prompts'
import { clearSpinnerLines } from '@/util/prompt'
import { PatUtils } from '@/util/pat'
export default class CreatePat extends BaseCommand {
getName(): string {
return 'create'
}
getDescription(): string {
return 'Creates a personal access token'
}
getUsage(): string {
return `keyshade pat create [options]
Create a PAT with name my_token
keyshade pat create --name "my_token"
Add 1 month as token expiry
keyshade pat create --name "my_token" --expires-after-days 30
`
}
canMakeHttpRequests(): boolean {
return true
}
getOptions(): CommandOption[] {
return [
{
short: '-n',
long: '--name <string>',
description: 'Name of the PAT'
},
{
short: '-e',
long: '--expires-after-days <number>',
description:
'Number of days after which the PAT will expire. Min - 1, Max - 365. By default, the token never expires.'
}
]
}
async action({ options }: CommandActionData): Promise<void> {
const { name, expiresAfterDays } = await this.parseOptions(options)
const loading = spinner()
loading.start('Creating your personal access token...')
try {
const { data, success, error } =
await ControllerInstance.getInstance().personalAccessTokenController.createPersonalAccessToken(
{
name,
expiresAfterDays
},
this.headers
)
if (success) {
loading.stop()
clearSpinnerLines()
log.success(
`
โ
Personal Access Token Created Successfully!
๐ Name: ${data.name}
๐ Token: ${data.token}
โ ๏ธ This token will only be shown **once**.
Please copy and store it securely โ you wonโt be able to view it again!
`.trim()
)
} else if (error) {
loading.stop()
clearSpinnerLines()
log.error(
`We encountered an error while creating your personal access token: ${JSON.parse(error.message).body}`
)
}
} catch (error) {
console.error(error)
clearSpinnerLines()
loading.stop()
log.error(
'We encountered an error while creating your personal access token!'
)
}
}
private async parseOptions(options: CommandActionData['options']): Promise<{
name: string
expiresAfterDays?: number
}> {
let { name, expiresAfterDays } = options
console.log('options', options)
if (Object.keys(options).length === 0) {
name = await PatUtils.readName()
expiresAfterDays = await PatUtils.readExpiresAfterDays()
} else {
if (!name) {
throw new Error('No name provided. Please provide a name for the PAT.')
}
}
return {
name,
expiresAfterDays: expiresAfterDays ? parseInt(expiresAfterDays) : null
}
}
}