You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.9 KiB

const { italic, bold } = require('chalk');
const error = require('../../lib/utils/output/error');
const wait = require('../../lib/utils/output/wait');
const cmd = require('../../lib/utils/output/cmd');
const param = require('../../lib/utils/output/param');
const info = require('../../lib/utils/output/info');
const uid = require('../../lib/utils/output/uid');
const success = require('../../lib/utils/output/success');
const stamp = require('../../lib/utils/output/stamp');
const promptBool = require('../../lib/utils/input/prompt-bool');
const eraseLines = require('../../lib/utils/output/erase-lines');
const treatBuyError = require('../../lib/utils/domains/treat-buy-error');
module.exports = async function({domains, args, currentTeam, user}) {
const name = args[0];
let elapsed
if (!name) {
return error(`Missing domain name. Run ${cmd('now domains help')}`);
}
const nameParam = param(name);
elapsed = stamp()
let stopSpinner = wait(`Checking availability for ${nameParam}`);
const price = await domains.price(name);
const available = await domains.status(name);
stopSpinner();
if (! available) {
return error(`The domain ${nameParam} is ${italic('unavailable')}! ${elapsed()}`);
}
info(`The domain ${nameParam} is ${italic('available')}! ${elapsed()}`);
const confirmation = await promptBool(`Buy now for ${bold(`$${price}`)} (${
bold(
(currentTeam && currentTeam.slug) || user.username || user.email
)
})?`);
eraseLines(1);
if (!confirmation) {
return info('Aborted');
}
stopSpinner = wait('Purchasing');
elapsed = stamp()
let domain;
try {
domain = await domains.buy(name);
} catch (err) {
stopSpinner();
return treatBuyError(err);
}
stopSpinner();
success(`Domain purchased and created ${uid(domain.uid)} ${elapsed()}`);
info(
`You may now use your domain as an alias to your deployments. Run ${cmd('now alias help')}`
);
};