@ -5,14 +5,14 @@ const wait = require('../../lib/utils/output/wait')
const cmd = require ( '../../lib/utils/output/cmd' )
const cmd = require ( '../../lib/utils/output/cmd' )
const param = require ( '../../lib/utils/output/param' )
const param = require ( '../../lib/utils/output/param' )
const info = require ( '../../lib/utils/output/info' )
const info = require ( '../../lib/utils/output/info' )
const uid = require ( '../../lib/utils/output/uid' )
const success = require ( '../../lib/utils/output/success' )
const success = require ( '../../lib/utils/output/success' )
const stamp = require ( '../../lib/utils/output/stamp' )
const stamp = require ( '../../lib/utils/output/stamp' )
const promptBool = require ( '../../lib/utils/input/prompt-bool' )
const promptBool = require ( '../../lib/utils/input/prompt-bool' )
const eraseLines = require ( '../../lib/utils/output/erase-lines' )
const eraseLines = require ( '../../lib/utils/output/erase-lines' )
const treatBuyError = require ( '../../lib/utils/domains/treat-buy-error' )
const treatBuyError = require ( '../../lib/utils/domains/treat-buy-error' )
const NowCreditCards = require ( '../../lib/credit-cards' )
module . exports = async function ( { domains , args , currentTeam , user } ) {
module . exports = async function ( { domains , args , currentTeam , user , coupon } ) {
const name = args [ 0 ]
const name = args [ 0 ]
let elapsed
let elapsed
@ -21,14 +21,54 @@ module.exports = async function({ domains, args, currentTeam, user }) {
}
}
const nameParam = param ( name )
const nameParam = param ( name )
elapsed = stamp ( )
let stopSpinner
let stopSpinner = wait ( ` Checking availability for ${ nameParam } ` )
let price
let price
let period
let period
let validCoupon
try {
try {
if ( coupon ) {
stopSpinner = wait ( ` Validating coupon ${ param ( coupon ) } ` )
const creditCards = new NowCreditCards ( {
apiUrl : domains . _ agent . _ url ,
token : domains . _ token ,
debug : domains . _ debug ,
currentTeam
} )
const [ couponInfo , { cards } ] = await Promise . all ( [
domains . coupon ( coupon ) ,
creditCards . ls ( )
] )
stopSpinner ( )
if ( ! couponInfo . isValid ) {
return error ( ` The coupon ${ param ( coupon ) } is invalid ` )
}
if ( ! couponInfo . canBeUsed ) {
return error ( ` The coupon ${ param ( coupon ) } has already been used ` )
}
validCoupon = true
if ( cards . length === 0 ) {
info (
'You have no credit cards on file. Please add one in order to claim your free domain'
)
info ( ` Your card will ${ bold ( 'not' ) } be charged ` )
await require ( '../now-billing-add' ) ( {
creditCards ,
currentTeam ,
user ,
clear : true
} )
}
}
elapsed = stamp ( )
stopSpinner = wait ( ` Checking availability for ${ nameParam } ` )
const json = await domains . price ( name )
const json = await domains . price ( name )
price = json . price
price = validCoupon ? 0 : json . price
period = json . period
period = json . period
} catch ( err ) {
} catch ( err ) {
stopSpinner ( )
stopSpinner ( )
@ -61,9 +101,8 @@ module.exports = async function({ domains, args, currentTeam, user }) {
stopSpinner = wait ( 'Purchasing' )
stopSpinner = wait ( 'Purchasing' )
elapsed = stamp ( )
elapsed = stamp ( )
let domain
try {
try {
domain = await domains . buy ( name )
await domains . buy ( { name , coupon } )
} catch ( err ) {
} catch ( err ) {
stopSpinner ( )
stopSpinner ( )
return treatBuyError ( err )
return treatBuyError ( err )
@ -71,7 +110,7 @@ module.exports = async function({ domains, args, currentTeam, user }) {
stopSpinner ( )
stopSpinner ( )
success ( ` Domain purchased and created ${ uid ( domain . uid ) } ${ elapsed ( ) } ` )
success ( ` Domain ${ nameParam } purchased ${ elapsed ( ) } ` )
info (
info (
` You may now use your domain as an alias to your deployments. Run ${ cmd (
` You may now use your domain as an alias to your deployments. Run ${ cmd (
'now alias --help'
'now alias --help'