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.
65 lines
1.9 KiB
65 lines
1.9 KiB
8 years ago
|
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')}`
|
||
|
);
|
||
|
};
|