enable.ts•4.08 kB
import type { PrismaConfigInternal } from '@prisma/config'
import { arg, Command, isError, link } from '@prisma/internals'
import { getOptionalParameter, getRequiredParameterOrThrow } from '../_lib/cli/parameters'
import { messages } from '../_lib/messages'
import { requestOrThrow } from '../_lib/pdp'
import { generateConnectionString, getTokenOrThrow, platformParameters } from '../_lib/utils'
export class Enable implements Command {
public static new() {
return new Enable()
}
public async parse(argv: string[], _config: PrismaConfigInternal): Promise<string | Error> {
const args = arg(argv, {
...platformParameters.environment,
'--url': String,
// TODO rename to "serviceToken" in a future release.
'--apikey': Boolean,
'--region': String,
})
if (isError(args)) return args
const token = await getTokenOrThrow(args)
const environmentId = getRequiredParameterOrThrow(args, ['--environment', '-e'])
const connectionString = getRequiredParameterOrThrow(args, ['--url'])
const withServiceToken = getOptionalParameter(args, ['--apikey']) ?? false
const regionId = getOptionalParameter(args, ['--region'])
const { databaseLinkCreate } = await requestOrThrow<
{
databaseLinkCreate: {
__typename: string
id: string
}
},
{
environmentId: string
connectionString: string
regionId?: string
}
>({
token,
body: {
query: /* GraphQL */ `
mutation ($input: MutationDatabaseLinkCreateInput!) {
databaseLinkCreate(input: $input) {
__typename
... on Error {
message
}
... on DatabaseLink {
id
}
}
}
`,
variables: {
input: {
environmentId,
connectionString,
...(regionId && { regionId }),
},
},
},
})
const { serviceTokenCreate } = await requestOrThrow<
{
accelerateEnable: {}
serviceTokenCreate?: {
value: string
}
},
null,
{
accelerateEnableInput: { databaseLinkId: string }
serviceTokenCreateInput: { environmentId: string }
withServiceToken: boolean
}
>({
token,
body: {
query: /* GraphQL */ `
mutation (
$accelerateEnableInput: MutationAccelerateEnableInput!
$serviceTokenCreateInput: MutationServiceTokenCreateInput!
$withServiceToken: Boolean!
) {
accelerateEnable(input: $accelerateEnableInput) {
__typename
... on Error {
message
}
}
serviceTokenCreate(input: $serviceTokenCreateInput) @include(if: $withServiceToken) {
__typename
... on Error {
message
}
... on ServiceTokenWithValue {
value
}
}
}
`,
variables: {
withServiceToken,
accelerateEnableInput: { databaseLinkId: databaseLinkCreate.id },
serviceTokenCreateInput: { environmentId },
},
},
})
const gettingStartedUrl = link('https://pris.ly/d/accelerate-getting-started')
if (serviceTokenCreate) {
return messages.success(
`Accelerate enabled. Use this Accelerate connection string to authenticate requests:\n` +
'\n' +
`${generateConnectionString(serviceTokenCreate.value)}\n` +
'\n' +
`For more information, check out the Getting started guide here: ${gettingStartedUrl}`,
)
} else {
return messages.success(
`Accelerate enabled. Use your secure API key in your Accelerate connection string to authenticate requests.\n` +
`\n` +
`For more information, check out the Getting started guide here: ${gettingStartedUrl}`,
)
}
}
}