Comparing version 0.21.7 to 0.22.0
@@ -0,344 +1,273 @@ | ||
var helpers = require('../util/helpers') | ||
var localCreds = require("../util/creds.js") | ||
var surge = require('../surge') | ||
var surgeSDK = require("surge-sdk") | ||
var ProgressBar = require("progress") | ||
var fs = require("fs") | ||
var request = require("request") | ||
var helpers = require('./util/helpers') | ||
var localCreds = require("./util/creds.js") | ||
var tar = require('tarr') | ||
var zlib = require('zlib') | ||
var fsReader = require('surge-fstream-ignore') | ||
var surge = require('../surge') | ||
var ProgressBar = require("progress") | ||
var split = require("split") | ||
var url = require("url") | ||
var ignore = require("surge-ignore") | ||
module.exports = function(req, next){ | ||
req.success = false; | ||
var progress = {} | ||
var progressDone = {} | ||
var ts = new Date().toJSON() | ||
var sdk = surgeSDK({ | ||
endpoint: req.endpoint.format(), | ||
defaults: helpers.defaults | ||
}) | ||
/** | ||
* Some useful metadata | ||
* progress | ||
* | ||
* payload includes upload progress | ||
* | ||
*/ | ||
var headers = { | ||
sdk.publish(req.project, req.domain, { | ||
"user":"token", | ||
"pass": req.creds.token | ||
}, { | ||
"version" : req.pkg.version, | ||
"file-count": req.fileCount, | ||
"cmd": req.config.cmd, | ||
"project-size": req.projectSize, | ||
"timestamp": new Date().toJSON() | ||
} | ||
"cmd": req.configuration.cmd, | ||
"timestamp": ts, | ||
"stage": req.argv.s, | ||
"message": req.argv.m, | ||
"add": req.argv.a, | ||
"rem": req.argv.r, | ||
"ssl": req.ssl | ||
}, req.argv) | ||
/** | ||
* Collaborators to add | ||
* progress | ||
* | ||
* payload includes upload progress | ||
* | ||
*/ | ||
if (req.argv.a) | ||
headers["add"] = req.argv.a; | ||
.on("progress", function(payload){ | ||
try { | ||
// we have two different display for the progress bars | ||
var displays = { | ||
"upload": helpers.smart('upload:').grey + ' [:bar] :percent', | ||
"cdn": helpers.smart('CDN:').grey + ' [:bar] :percent', | ||
"encrypt": helpers.smart('encryption:').grey + ' [:bar] :percent' | ||
} | ||
/** | ||
* Collaborators to remove | ||
*/ | ||
// create progress bar (if one doesnt exist) | ||
progress[payload.id] = progress[payload.id] || new ProgressBar(displays[payload.id], { | ||
complete: '=', incomplete: ' ', width: 25, total: payload.total | ||
}) | ||
if (req.argv.r) | ||
headers["rem"] = req.argv.r; | ||
// clear file name on last update | ||
var file = payload.written >= payload.total ? "" : payload.file | ||
// refresh view | ||
if (!progressDone[payload.id]){ | ||
if (payload.written / payload.total === 1) progressDone[payload.id] = true | ||
if (payload.written > payload.total) progressDone[payload.id] = true | ||
progress[payload.id].update(payload.written / payload.total) | ||
} | ||
/** | ||
* Perform build on server | ||
*/ | ||
} catch(e){} | ||
if (req.argv.build) | ||
headers["build"] = req.argv.build; | ||
}) | ||
/** | ||
* Force Protocol? | ||
* regionInfo | ||
* | ||
* payload includes information about surge edgenode regions | ||
* | ||
* { | ||
* nsDomain: "surge.world", | ||
* regions: { | ||
* "yyz":{ "ip": "159.203.50.177", "country": "CA", "city": "Toronto" }, | ||
* "jfk":{ "ip": "159.203.159.100", "country": "US", "city": "New York" }, | ||
* "sfo":{ "ip": "138.197.235.123", "country": "US", "city": "San Francisco" }, | ||
* "lhr":{ "ip": "46.101.67.123", "country": "GB", "city": "London" }, | ||
* "ams":{ "ip": "188.166.132.94", "country": "NL", "city": "Amsterdam" }, | ||
* "fra":{ "ip": "138.68.112.220", "country": "DE", "city": "Frankfurt" }, | ||
* "sgp":{ "ip": "139.59.195.30", "country": "SG", "city": "Singapore" }, | ||
* "blr":{ "ip": "139.59.50.135", "country": "IN", "city": "Bangalore" } | ||
* } | ||
* } | ||
* | ||
*/ | ||
if (req.ssl !== null) | ||
headers["ssl"] = req.ssl | ||
// .on("progress", function(d){ | ||
// console.log(JSON.stringify(d)) | ||
// }) | ||
req.headers = headers | ||
.on("info", function(payload){ | ||
req.info = payload | ||
// helpers.displayServers(payload.instances) | ||
// helpers.displayPreview(payload) | ||
helpers.displayPublishInfo(payload) | ||
}) | ||
/** | ||
* Progress Bars | ||
*/ | ||
* users | ||
* | ||
* payload includes list of collaborators | ||
* | ||
*/ | ||
var progress = {} | ||
.on("users", function(payload){ | ||
helpers.log(helpers.smart("users:").grey, payload.users.join(", ")) | ||
}) | ||
/** | ||
* Our upload "data" handle | ||
*/ | ||
* cert | ||
* | ||
* payload includes information about SSL certificate | ||
* | ||
*/ | ||
var tick = function(tick){ | ||
//console.log("tick", tick.toString()) | ||
// .on("cert", function(payload){ | ||
// try{ | ||
// helpers.log(helpers.smart("encryption:").grey + " " + payload.data.issuer + " - " + (payload.data.altnames || []).join(", ") + ( " (" + payload.data.expiresInWords + ")").grey) | ||
// } catch(e){ | ||
// helpers.space() | ||
// helpers.log(helpers.smart("Error").red + (" - " + "please report error to support@surge.sh").grey) | ||
// helpers.space() | ||
// } | ||
// }) | ||
if (Object.keys(progress).length > 1) global.ponr = true | ||
//try { | ||
.on("ssl", function(payload){ | ||
payload.certs.forEach(function(cert){ | ||
helpers.log(helpers.smart("CA:").grey + " " + (cert.issuer) + ( " (exp. " + cert.expInDays + " days)").grey) | ||
}) | ||
}) | ||
try { | ||
var payload = JSON.parse(tick.toString()) | ||
} catch(e) { | ||
//console.log(e) | ||
return; | ||
} | ||
/** | ||
* collect | ||
* | ||
* payload includes information needed to subscribe to a plan that will then accept the upload | ||
* | ||
*/ | ||
if (payload.hasOwnProperty("type") && payload.type === "error") { | ||
console.log() | ||
console.log() | ||
helpers.log(" Processing Error:".yellow, payload.error.filename).log() | ||
console.log(helpers.stacktrace(payload.error.stack, { lineno: payload.error.lineno })) | ||
helpers.log() | ||
console.log(" ", payload.error.message) | ||
console.log() | ||
process.exit(1) | ||
req.status = req.status || "Compile Error" | ||
} else | ||
if (payload.hasOwnProperty("type") && payload.type === "users") { | ||
helpers.log(helpers.smart("users:").grey, payload.users.join(", ")) | ||
} else | ||
if (payload.hasOwnProperty("type") && payload.type === "collect") { | ||
//console.log("payload:collect", payload) | ||
var msg = (" " + payload.plan.name.underline + " plan requred. ").grey + ("$" + (payload.plan.amount / 100) + "/mo with a " + payload.plan.trial_period_days + " day trial").underline.grey | ||
helpers.log() | ||
if (payload.hasOwnProperty("perks")) { | ||
helpers.log(msg += "\n\n Includes...".blue) | ||
payload.perks.forEach(function(perk){ | ||
helpers.log((" - " + perk).blue) | ||
}) | ||
helpers.log() | ||
} else { | ||
helpers.log(msg) | ||
.on("collect", function(payload){ | ||
var msg = (" " + payload.plan.name.underline + " plan requred. ").grey + ("$" + (payload.plan.amount / 100) + "/mo with a " + payload.plan.trial_period_days + " day trial").underline.grey | ||
helpers.log() | ||
if (payload.hasOwnProperty("perks")) { | ||
helpers.log(msg += "\n\n Includes...".blue) | ||
payload.perks.forEach(function(perk){ helpers.log((" - " + perk).blue); }) | ||
helpers.log() | ||
} else { | ||
helpers.log(msg) | ||
} | ||
req.plan = payload.plan.name | ||
helpers.payment(req, payload.stripe_pk, payload.card)(function(paymentToken){ | ||
sdk.plan({ | ||
"plan": payload.plan.id, | ||
"token": paymentToken, | ||
"timestamp": ts | ||
}, { "user": "token", "pass": req.creds.token }, function(errors, rsp){ | ||
if (errors) { | ||
helpers.space() | ||
helpers.trunc("Error".red + " - troubles switching plan".grey) | ||
helpers.space() | ||
}else{ | ||
helpers.space() | ||
helpers.trunc(rsp.msg.grey) | ||
helpers.space() | ||
} | ||
}) | ||
}) | ||
}) | ||
req.plan = payload.plan.name | ||
helpers.payment(req, payload["stripe_pk"], payload.card)(function(token){ | ||
/** | ||
* unauthenticated | ||
* | ||
*/ | ||
// can this be passed in? | ||
var uri = url.resolve(req.endpoint, "subscription") | ||
request({ | ||
uri: uri, | ||
method: "PUT", | ||
auth: { | ||
'user': 'token', | ||
'pass': req.creds.token, | ||
'sendImmediately': true | ||
}, | ||
form: { | ||
plan: payload.plan.id, | ||
token: token, | ||
timestamp: req.headers.timestamp | ||
} | ||
}, function(e,r,b){ | ||
if (r.statusCode == 201 || r.statusCode == 200) { | ||
//console.log("here") | ||
if (token === null) console.log() | ||
// var sub = JSON.parse(b) | ||
// console.log(" plan:".grey, sub.plan.name) | ||
} else { | ||
console.log("ERROR") | ||
} | ||
}) | ||
}) | ||
.on("unauthenticated", function(payload){ | ||
helpers.space() | ||
helpers.trunc("Aborted".yellow + (" - local token has expired and cleared. please try again.").grey) | ||
helpers.space() | ||
localCreds(req.argv.endpoint).set(null) | ||
process.exit(1) | ||
}) | ||
// prompt for user | ||
} else | ||
if (payload.hasOwnProperty("type") && payload.type === "cert") { | ||
try{ | ||
helpers.log(helpers.smart("encryption:").grey + " " + (payload.data.altnames || []).join(", ") + ( " (" + payload.data.expiresInWords + ")").grey) | ||
} catch(e){ | ||
console.log("ERROR (please report error to support@surge.sh") | ||
console.log(e) | ||
} | ||
} else | ||
if (payload.hasOwnProperty("type") && payload.type === "ip") { | ||
req.success = true | ||
if (payload.data) { | ||
helpers.log(helpers.smart("IP:").grey + " " + payload.data.ip) | ||
} | ||
} else | ||
/** | ||
* forbidden | ||
* | ||
*/ | ||
if (payload.hasOwnProperty("type") && payload.type === "event_registration") { | ||
if (payload.data) { | ||
console.log() | ||
console.log((" " + payload.data.event.name + " is set!").bold) | ||
.on("forbidden", function(payload){ | ||
helpers.space() | ||
helpers.trunc("Aborted".yellow + (" - you do not have permission to publish to " + req.domain.underline).grey) | ||
helpers.space() | ||
process.exit(1) | ||
}) | ||
if (payload.data.event.start) | ||
console.log(" start:".grey, payload.data.event.start) | ||
if (payload.data.event.end) | ||
console.log(" end:".grey, payload.data.event.end) | ||
if (payload.data.event.website) | ||
console.log(" website:".grey, payload.data.event.website) | ||
/** | ||
* error (depricated) | ||
* | ||
* payload includes information needed to display compile errors to user | ||
* | ||
*/ | ||
if (payload.data.event.email) | ||
console.log(" email:".grey, payload.data.event.email) | ||
.on("error", function(payload){ | ||
console.log() | ||
console.log() | ||
helpers.log(" Processing Error:".yellow, payload.error.filename).log() | ||
console.log(helpers.stacktrace(payload.error.stack, { lineno: payload.error.lineno })) | ||
helpers.log() | ||
console.log(" ", payload.error.message) | ||
console.log() | ||
req.status = req.status || "Compile Error" | ||
process.exit(1) | ||
}) | ||
if (payload.data.event.twitter) | ||
console.log(" twitter:".grey, payload.data.event.twitter) | ||
} | ||
} else | ||
if (payload.hasOwnProperty("type") && payload.type === "event_participant") { | ||
if (payload.data) { | ||
console.log() | ||
/** | ||
* fail | ||
* | ||
* the deployment has failed | ||
* | ||
*/ | ||
// end time | ||
var out = [" You are in ".grey + payload.data.event.name.bold + "!".grey] | ||
if (payload.data.event.endTime) | ||
out.push("Competition ends in ".grey + payload.data.event.endTime.toString().green) | ||
.on("fail", function(obj){ | ||
console.log() | ||
console.log() | ||
helpers.trunc("Error".red + " - Deployment did not succeed.".grey) | ||
helpers.space() | ||
process.exit(1) | ||
}) | ||
// output | ||
console.log(out.join(" ")) | ||
// help bar | ||
out = [" w: ".grey + payload.data.event.website + " e: ".grey + payload.data.event.email] | ||
// if (payload.data.event.website) | ||
// console.log(" website:".grey, payload.data.event.website) | ||
// if (payload.data.event.email) | ||
// console.log(" email:".grey, payload.data.event.email) | ||
if (payload.data.event.twitter) | ||
out.push(" t: ".grey, payload.data.event.twitter) | ||
console.log(out.join("")) | ||
} | ||
} else | ||
if (payload.hasOwnProperty("type") && payload.type === "subscription") { | ||
if (payload.data) { | ||
//console.log(" plan:".grey, payload.data.plan.name) | ||
} else { | ||
//console.log(" plan:".grey, "Free") | ||
} | ||
} else { | ||
try { | ||
// we have two different display for the progress bars | ||
var displays = { | ||
"upload": helpers.smart('upload:').grey + ' [:bar] :percent eta: :etas'+ ( " (" + req.fileCount +' files, ' + req.projectSize + ' bytes)').grey, | ||
"cdn": helpers.smart('CDN:').grey + ' [:bar] :percent' | ||
} | ||
// create progress bar (if one doesnt exist) | ||
progress[payload.id] = progress[payload.id] || new ProgressBar(displays[payload.id], { | ||
complete: '=', | ||
incomplete: ' ', | ||
width: 20, | ||
total: payload.total | ||
}) | ||
// clear file name on last update | ||
var file = payload.written >= payload.total | ||
? "" | ||
: payload.file | ||
// refresh view | ||
if (!(payload.id === "cdn" && payload.end)){ | ||
progress[payload.id].update(payload.written / payload.total, { file: file }) | ||
} | ||
} catch(e){ | ||
//console.log(e) | ||
} | ||
} | ||
// } catch(e) { | ||
// console.log("CATCH", e) | ||
// } | ||
} | ||
var verbose = function(line){ | ||
console.log("N", line.toString()) | ||
} | ||
/** | ||
* Upload | ||
* success | ||
* | ||
* the deployment has failed | ||
* | ||
*/ | ||
// create upload | ||
var uri = url.resolve(req.endpoint, req.domain) | ||
var handshake = request.put(uri, { headers: headers }) | ||
// apply basic auth | ||
handshake.auth("token", req.creds.token, true) | ||
// catch errors | ||
handshake.on('error', console.log) | ||
// split replies on new line | ||
handshake.pipe(split()) | ||
// output result | ||
handshake.on("data", tick) | ||
// done | ||
handshake.on("end", function(){ | ||
if (req.success === true){ | ||
return next() | ||
.on("success", function(){ | ||
helpers.space() | ||
if (req.argv.stage){ | ||
helpers.trunc("Success!".green + (" - Preveiw available at " + (req.info.metadata.preview).underline).grey) | ||
} else { | ||
helpers.log() | ||
helpers.log() | ||
helpers.log(" Error".red + " - Deployment did not succeed.".grey) | ||
helpers.log() | ||
process.exit(1) | ||
helpers.trunc("Success!".green + (" - Published to " + (req.domain).underline).grey) | ||
} | ||
helpers.space() | ||
return next() | ||
}) | ||
handshake.on("response", function(rsp){ | ||
if (rsp.statusCode == 403) { | ||
helpers.log() | ||
if(rsp.headers.hasOwnProperty("reason")){ | ||
helpers.trunc("Aborted".yellow + " - " + rsp.headers["reason"]) | ||
} else { | ||
helpers.trunc("Aborted".yellow + (" - you do not have permission to publish to " + req.domain.underline).grey) | ||
} | ||
helpers.log() | ||
process.exit(1) | ||
} else if (rsp.statusCode == 401) { | ||
localCreds(req.argv.endpoint).set(null) | ||
helpers.log() | ||
if(rsp.headers.hasOwnProperty("reason")){ | ||
helpers.trunc("Aborted".yellow + " - " + rsp.headers["reason"]) | ||
} else { | ||
helpers.trunc("Aborted".yellow + " - local token has expired and cleared. please try again.") | ||
} | ||
helpers.log() | ||
process.exit(1) | ||
// console.log(rsp.statusCode) | ||
} | ||
}) | ||
// Read Project | ||
var project = fsReader({ 'path': req.project, ignoreFiles: [".surgeignore"] }) | ||
// we always ignore .git directory | ||
project.addIgnoreRules(ignore) | ||
// chain all this together... | ||
project | ||
.pipe(tar.Pack()) | ||
.pipe(zlib.Gzip()) | ||
.pipe(handshake) | ||
} |
@@ -1,2 +0,2 @@ | ||
var helpers = require("./util/helpers") | ||
var helpers = require("../util/helpers") | ||
@@ -6,32 +6,45 @@ module.exports = function(req, next){ | ||
helpers | ||
//.log() | ||
//.log(" " + req.configuration.name.bold, "– single command web publishing.".grey, ("(v" + req.pkg.version + ")"). grey) | ||
.log() | ||
.log(" " + req.config.name.bold, "– single command web publishing.".grey, ("(v" + req.pkg.version + ")"). grey) | ||
.log(" Main Usage:".grey) | ||
.log(" "+ req.configuration.name +" <project-path> <domain> publish project to domain") | ||
.log() | ||
.log(" Usage:".grey) | ||
.log(" "+ req.config.name +" <project> <domain>") | ||
.log(" Project Commands:".grey) | ||
.log(" "+ req.configuration.name +" cutover <preview> change to latest revision") | ||
.log(" "+ req.configuration.name +" discard <preview> remove revision from system") | ||
.log(" "+ req.configuration.name +" rollfore <domain> change to next revision") | ||
.log(" "+ req.configuration.name +" rollback <domain> change to previous revision") | ||
.log(" "+ req.configuration.name +" teardown <domain> tear down a published project") | ||
.log(" "+ req.configuration.name +" invite <domain> <emails> invites user to be a contributor") | ||
.log(" "+ req.configuration.name +" revoke <domain> <emails> revokes contributor rights") | ||
.log(" "+ req.configuration.name +" list <domain> list all revisions") | ||
.log(" "+ req.configuration.name +" ssl <domain> <pempath> publish .pem file for SSL support") | ||
.log() | ||
.log(" Account Commands:".grey) | ||
.log(" "+ req.configuration.name +" whoami show who you are logged in as") | ||
.log(" "+ req.configuration.name +" login only performs authentication step") | ||
.log(" "+ req.configuration.name +" logout expire local token") | ||
.log(" "+ req.configuration.name +" token create token for automation purposes") | ||
.log(" "+ req.configuration.name +" plan upgrade or downgrade account plan") | ||
.log(" "+ req.configuration.name +" list list all projects") | ||
.log() | ||
.log(" Options:".grey) | ||
.log(" -a, --add adds user to list of collaborators (email address)") | ||
.log(" -r, --remove removes user from list of collaborators (email address)") | ||
.log(" -V, --version show the version number") | ||
.log(" -h, --help show this help message") | ||
.log(" -s, --preview (when publishing) publishes preview") | ||
.log(" -t, --token pass in token to use for call") | ||
.log(" -V, --version show the version number") | ||
.log(" -h, --help show this help message") | ||
.log() | ||
.log(" Additional commands:".grey) | ||
.log(" "+ req.config.name +" whoami show who you are logged in as") | ||
.log(" "+ req.config.name +" logout expire local token") | ||
.log(" "+ req.config.name +" login only performs authentication step") | ||
.log(" "+ req.config.name +" list list all domains you have access to") | ||
.log(" "+ req.config.name +" teardown tear down a published project") | ||
.log(" "+ req.config.name +" plan set account plan") | ||
.log() | ||
// .log(" Examples:".grey) | ||
// .log(" surge ./www example.com") | ||
// .log(" surge .") | ||
.log(" Examples:".grey) | ||
.log(" "+ req.configuration.name +" www example.com publishes www directory to example.com") | ||
.log(" "+ req.configuration.name +" . example.com --preview publishes current directory for preview") | ||
.log(" "+ req.configuration.name +" cutover example.com switches latest preview to production") | ||
.log(" "+ req.configuration.name +" . _ publish current dir to random subdomain") | ||
// .log() | ||
.log(" Guides:".grey) | ||
.log(" Getting started " + "surge.sh/help/getting-started-with-surge".underline.grey) | ||
.log(" Custom domains " + "surge.sh/help/adding-a-custom-domain".underline.grey) | ||
.log(" Additional help " + "surge.sh/help".underline.grey) | ||
// .log(" Guides:".grey) | ||
// .log(" Getting started " + "surge.sh/help/getting-started-with-surge".underline.grey) | ||
// .log(" Custom domains " + "surge.sh/help/adding-a-custom-domain".underline.grey) | ||
// .log(" Additional help " + "surge.sh/help".underline.grey) | ||
.log() | ||
.log(" When in doubt, run ".grey + req.config.name.green.underline + " from within your project directory.".grey) | ||
.log(" When in doubt, run ".grey + req.configuration.name.green.underline + " from within your project directory.".grey) | ||
.log() | ||
@@ -38,0 +51,0 @@ |
var url = require("url") | ||
var request = require("request") | ||
var Table = require("cli-table3") | ||
var helpers = require("./util/helpers") | ||
var helpers = require("../util/helpers") | ||
var surgeSDK = require("surge-sdk") | ||
module.exports = function(req, next){ | ||
var options = { | ||
'url': url.resolve(req.endpoint.format(), '/list'), | ||
'method': 'get', | ||
'auth': { | ||
'user': "token", | ||
'pass': req.creds.token, | ||
'sendImmediately': true | ||
} | ||
var sdk = surgeSDK({ | ||
endpoint: req.endpoint.format(), | ||
defaults: helpers.defaults | ||
}) | ||
var listAllProjects = function(){ | ||
sdk.list({ user: "token", pass: req.creds.token }, function(error, projects){ | ||
var table = new Table({ | ||
//head: ["cmd".underline.grey, 'REV DOMAIN'.grey, 'AGE'.grey, 'MODE'.grey], | ||
chars: { 'top': '' , 'top-mid': '' , 'top-left': '' , 'top-right': '' | ||
, 'bottom': '' , 'bottom-mid': '' , 'bottom-left': '' , 'bottom-right': '' | ||
, 'left': ' ' , 'left-mid': '' , 'mid': '' , 'mid-mid': '' | ||
, 'right': '' , 'right-mid': '' , 'middle': ' ' }, | ||
style: { 'padding-left': 0, 'padding-right': 2 } | ||
}) | ||
var lastcmd = "" | ||
if (projects.length != 0) { | ||
projects.forEach(function(project){ | ||
//var perm = project.rev ? (project.rev + " ").grey + project.domain : "" | ||
var perm = project.domain | ||
if (project.planName) { | ||
if (project.planName.indexOf("Standard") !== -1){ | ||
var pn = project.planName.grey | ||
}else{ | ||
var pn = project.planName.blue | ||
} | ||
} | ||
var row = [ | ||
perm || project.domain, | ||
(project.timeAgoInWords || "").grey, | ||
(project.cmd || "").grey, | ||
(project.platform || "").grey, | ||
pn || "", | ||
//lastcmd !== project.cmd ? (project.cmd).grey : "", | ||
] | ||
table.push(row) | ||
lastcmd = project.cmd | ||
}) | ||
helpers.space() | ||
helpers.log(table.toString()) | ||
} else { | ||
helpers.space() | ||
helpers.trunc(("Empty").grey) | ||
} | ||
return next() | ||
}) | ||
} | ||
request(options, function(e, r, obj){ | ||
if (e) throw e | ||
var list = JSON.parse(obj) | ||
var listSingleProject = function(){ | ||
var table = new Table({ | ||
//head: ["cmd".underline.grey, 'REV DOMAIN'.grey, 'AGE'.grey, 'MODE'.grey], | ||
chars: { 'top': '' , 'top-mid': '' , 'top-left': '' , 'top-right': '' | ||
, 'bottom': '' , 'bottom-mid': '' , 'bottom-left': '' , 'bottom-right': '' | ||
, 'left': ' ' , 'left-mid': '' , 'mid': '' , 'mid-mid': '' | ||
, 'right': '' , 'right-mid': '' , 'middle': ' ' }, | ||
style: { 'padding-left': 1, 'padding-right': 1 } | ||
sdk.list(req.argv["_"][0], { user: "token", pass: req.creds.token }, function(error, revisions){ | ||
revisions.reverse() | ||
var table = new Table({ | ||
chars: { 'top': '' , 'top-mid': '' , 'top-left': '' , 'top-right': '' | ||
, 'bottom': '' , 'bottom-mid': '' , 'bottom-left': '' , 'bottom-right': '' | ||
, 'left': ' ' , 'left-mid': '' , 'mid': '' , 'mid-mid': '' | ||
, 'right': '' , 'right-mid': '' , 'middle': ' ' }, | ||
style: { 'padding-left': 0, 'padding-right': 1 } | ||
}) | ||
var lastcmd = "" | ||
var terminalBreakpoint = 100 | ||
project = req.project | ||
if (revisions.length != 0) { | ||
revisions.forEach(function(revision){ | ||
if (revision.current){ | ||
var perm = revision.preview.blue.underline | ||
var row = [ | ||
perm || project.domain.blue.underline, | ||
revision.timeAgoInWords.blue.underline, | ||
revision.email.blue.underline, | ||
(revision.publicFileCount ? (revision.publicFileCount + " files").underline.blue : ""), | ||
revision.friendlySize.blue.underline | ||
] | ||
if (process.stdout.columns > terminalBreakpoint) row.push((revision.msg||"").blue) | ||
} else { | ||
var perm = revision.preview.grey | ||
var row = [ | ||
perm || project.domain, | ||
revision.timeAgoInWords.grey, | ||
revision.email.grey, | ||
(revision.publicFileCount ? (revision.publicFileCount + " files").grey : ""), | ||
revision.friendlySize.grey | ||
] | ||
if (process.stdout.columns > terminalBreakpoint) row.push((revision.msg || "").grey) | ||
} | ||
table.push(row) | ||
lastcmd = project.cmd | ||
}) | ||
helpers.space() | ||
helpers.log(table.toString()) | ||
} else { | ||
helpers.space() | ||
helpers.trunc(("Empty").grey) | ||
} | ||
return next() | ||
}) | ||
//console.log(req) | ||
var lastcmd = "" | ||
if (list.length != 0) { | ||
list.forEach(function(project){ | ||
var perm = project.rev ? (project.rev + " ").grey + project.domain : "" | ||
if (project.planName) { | ||
if (project.planName.indexOf("Standard") !== -1){ | ||
var pn = project.planName.grey | ||
}else{ | ||
var pn = project.planName.blue | ||
} | ||
} | ||
var row = [ | ||
perm || project.domain, | ||
project.timeAgoInWords.grey, | ||
project.cmd.grey, | ||
project.platform.grey, | ||
pn || "", | ||
//lastcmd !== project.cmd ? (project.cmd).grey : "", | ||
] | ||
table.push(row) | ||
lastcmd = project.cmd | ||
}) | ||
helpers.space() | ||
helpers.log(table.toString()) | ||
} else { | ||
helpers.space() | ||
helpers.trunc(("Empty").grey) | ||
} | ||
next() | ||
}) | ||
} | ||
if (req.argv["_"].length > 0) { | ||
listSingleProject() | ||
} else { | ||
listAllProjects() | ||
} | ||
} |
var path = require("path") | ||
var helpers = require("./util/helpers") | ||
var helpers = require("../util/helpers") | ||
@@ -4,0 +4,0 @@ module.exports = function(req, next){ |
@@ -1,3 +0,3 @@ | ||
var helpers = require("./util/helpers") | ||
var localCreds = require("./util/creds.js") | ||
var helpers = require("../util/helpers") | ||
var localCreds = require("../util/creds.js") | ||
var path = require("path") | ||
@@ -4,0 +4,0 @@ |
var request = require("request") | ||
var url = require("url") | ||
var helpers = require("./util/helpers") | ||
var helpers = require("../util/helpers") | ||
var path = require("path") | ||
@@ -6,0 +5,0 @@ var fs = require("fs") |
var request = require("request") | ||
var url = require("url") | ||
var helpers = require("./util/helpers") | ||
var helpers = require("../util/helpers") | ||
var path = require("path") | ||
@@ -6,0 +6,0 @@ var fs = require("fs") |
var request = require("request") | ||
var url = require("url") | ||
var helpers = require("./util/helpers") | ||
var helpers = require("../util/helpers") | ||
var path = require("path") | ||
@@ -5,0 +5,0 @@ var fs = require("fs") |
var request = require("request") | ||
var url = require("url") | ||
var helpers = require("./util/helpers") | ||
var helpers = require("../util/helpers") | ||
var path = require("path") | ||
@@ -9,26 +8,15 @@ var fs = require("fs") | ||
var parseUrl = require("url-parse-as-address") | ||
var surgeSDK = require("surge-sdk") | ||
module.exports = function(req, next, abort){ | ||
var sdk = surgeSDK({ | ||
endpoint: req.endpoint.format(), | ||
defaults: helpers.defaults | ||
}) | ||
var remove = function(domain){ | ||
var options = { | ||
'url': url.resolve(req.endpoint, domain), | ||
'method': 'delete', | ||
'auth': { | ||
'user': "token", | ||
'pass': req.creds.token, | ||
'sendImmediately': true | ||
} | ||
} | ||
request(options, function(e, r, obj){ | ||
if (e) throw e | ||
if (r.statusCode == 200 || r.statusCode == 204 || r.statusCode == 210) { | ||
sdk.teardown(domain, { user: "token", pass: req.creds.token }, function(error, info){ | ||
if (error) { | ||
helpers.space() | ||
helpers.trunc("Success".green + (" - " + domain.underline + " has been removed.").grey) | ||
helpers.space() | ||
process.exit() | ||
} else if (r.statusCode == 403) { | ||
helpers.space() | ||
helpers.trunc("Aborted".yellow + (" - Unable to remove " + domain.underline + ".").grey) | ||
@@ -39,3 +27,3 @@ helpers.space() | ||
helpers.space() | ||
helpers.log(obj) | ||
helpers.trunc("Success".green + (" - " + domain.underline + " has been removed.").grey) | ||
helpers.space() | ||
@@ -42,0 +30,0 @@ process.exit() |
var path = require("path") | ||
var helpers = require("./util/helpers") | ||
var helpers = require("../util/helpers") | ||
@@ -4,0 +4,0 @@ module.exports = function(req, next){ |
@@ -1,3 +0,3 @@ | ||
var helpers = require("./util/helpers") | ||
var creds = require("./util/creds") | ||
var helpers = require("../util/helpers") | ||
var creds = require("../util/creds") | ||
@@ -25,3 +25,3 @@ module.exports = function(req, next){ | ||
helpers.space() | ||
helpers.trunc("You are not Authenticated. It is not true. You are not authed. You are not!".grey) | ||
helpers.trunc("Not Authenticated!".grey) | ||
helpers.space() | ||
@@ -28,0 +28,0 @@ process.exit() |
458
lib/surge.js
var middleware = require('./middleware') | ||
var skin = require('./middleware/util/skin.js') | ||
var help = require('./middleware/help') | ||
var read = require("read") | ||
var minimist = require('minimist') | ||
// load help first so we can display and exit quickly | ||
var help = require('./middleware/help') | ||
// modules | ||
var read = require("read") | ||
var minimist = require('minimist') | ||
var whitelist = require("./middleware/whitelist") | ||
var endpoint = require("./middleware/endpoint") | ||
var pkg = require("./middleware/pkg") | ||
var version = require("./middleware/version") | ||
var welcome = require("./middleware/welcome") | ||
var creds = require("./middleware/creds") | ||
var whoami = require("./middleware/whoami") | ||
var tokencheck = require("./middleware/tokencheck") | ||
var email = require("./middleware/email") | ||
var auth = require("./middleware/auth") | ||
var logout = require("./middleware/logout") | ||
var help = require("./middleware/help") | ||
var project = require("./middleware/project") | ||
var size = require("./middleware/size") | ||
var domain = require("./middleware/domain") | ||
var protocol = require("./middleware/protocol") | ||
var deploy = require("./middleware/deploy") | ||
var domainOrSilent = require("./middleware/domainOrSilent") | ||
var pemOrSilent = require("./middleware/pemOrSilent") | ||
var ipaddress = require("./middleware/ipaddress") | ||
var login = require("./middleware/login") | ||
var shorthand = require("./middleware/shorthand") | ||
var list = require("./middleware/list") | ||
var token = require("./middleware/token") | ||
var teardown = require("./middleware/teardown") | ||
var discovery = require("./middleware/discovery") | ||
var plus = require("./middleware/plus") | ||
// utils | ||
var helpers = require('./util/helpers') | ||
var skin = require('./util/skin.js') | ||
var subscription= require("./middleware/subscription") | ||
var plans = require("./middleware/plans") | ||
var plan = require("./middleware/plan") | ||
var payment = require("./middleware/payment") | ||
var card = require("./middleware/card") | ||
var setcard = require("./middleware/setcard") | ||
var subscribe = require("./middleware/subscribe") | ||
// mini-libs that return middleware | ||
var auth = require("./middleware/_shared/auth") | ||
var discovery = require("./middleware/_shared/discovery") | ||
var ssl = require("./middleware/ssl") | ||
var log = require("./middleware/log") | ||
var helpers = require('./middleware/util/helpers') | ||
// middleware | ||
var whitelist = require("./middleware/_shared/_whitelist") | ||
var endpoint = require("./middleware/_shared/_endpoint") | ||
var pkg = require("./middleware/_shared/_pkg") | ||
var version = require("./middleware/_shared/_version") | ||
var welcome = require("./middleware/_shared/_welcome") | ||
var creds = require("./middleware/_shared/_creds") | ||
var tokencheck = require("./middleware/_shared/_tokencheck") | ||
var email = require("./middleware/_shared/_email") | ||
var project = require("./middleware/_shared/_project") | ||
var size = require("./middleware/_shared/_size") | ||
var domain = require("./middleware/_shared/_domain") | ||
var protocol = require("./middleware/_shared/_protocol") | ||
var domainOrSilent = require("./middleware/_shared/_domainOrSilent") | ||
var pemOrSilent = require("./middleware/_shared/_pemOrSilent") | ||
var ipaddress = require("./middleware/_shared/_ipaddress") | ||
var shorthand = require("./middleware/_shared/_shorthand") | ||
var subscription = require("./middleware/_shared/_subscription") | ||
var plans = require("./middleware/_shared/_plans") | ||
var payment = require("./middleware/_shared/_payment") | ||
var setcard = require("./middleware/_shared/_setcard") | ||
var subscribe = require("./middleware/_shared/_subscribe") | ||
var log = require("./middleware/_shared/_log") | ||
// also middleware but contains main functionality for command | ||
var logout = require("./middleware/logout") | ||
var login = require("./middleware/login") | ||
var whoami = require("./middleware/whoami") | ||
var deploy = require("./middleware/deploy") | ||
var list = require("./middleware/list") | ||
var token = require("./middleware/token") | ||
var teardown = require("./middleware/teardown") | ||
var plus = require("./middleware/plus") | ||
var plan = require("./middleware/plan") | ||
var card = require("./middleware/_shared/_card") | ||
var ssl = require("./middleware/ssl") | ||
var select = require("./middleware/select") | ||
var rollback = require("./middleware/rollback") | ||
var rollfore = require("./middleware/rollfore") | ||
var cutover = require("./middleware/cutover") | ||
var bust = require("./middleware/bust") | ||
var discard = require("./middleware/discard") | ||
var invite = require("./middleware/invite") | ||
var revoke = require("./middleware/revoke") | ||
var encrypt = require("./middleware/encrypt") | ||
var certs = require("./middleware/certs") | ||
var dns = require("./middleware/dns") | ||
var config = require("./middleware/config") | ||
@@ -79,11 +95,11 @@ | ||
module.exports = function(config){ | ||
config = config || {} | ||
module.exports = function(configuration){ | ||
configuration = configuration || {} | ||
var ep = config.endpoint | ||
? config.endpoint | ||
: config.platform ? "https://surge." + config.platform : 'https://surge.surge.sh' | ||
var ep = configuration.endpoint | ||
? configuration.endpoint | ||
: configuration.platform ? "https://surge." + configuration.platform : 'https://surge.surge.sh' | ||
config.platform = config.platform || "surge.sh" | ||
config.name = config.name || "surge" | ||
configuration.platform = configuration.platform || "surge.sh" | ||
configuration.name = configuration.name || "surge" | ||
@@ -96,5 +112,7 @@ var options = { | ||
a: 'add', | ||
r: 'remove' | ||
r: 'remove', | ||
s: 'stage', | ||
m: 'message' | ||
}, | ||
default: { e: ep } | ||
default: { e: ep, s: false } | ||
} | ||
@@ -118,13 +136,43 @@ | ||
var commands = ["login", "logout", "whoami", "list", "publish", "teardown", "token", "plus", "ssl", "plan", "card"] | ||
// we accept --preview | ||
if (argv.preview) argv.stage = argv.s = argv.preview | ||
var commands = [ | ||
"login", | ||
"logout", | ||
"whoami", | ||
"list", | ||
"rollback", | ||
"rollfore", | ||
"cutover", | ||
"discard", | ||
"publish", | ||
"teardown", | ||
"select", | ||
"token", | ||
"plus", | ||
"ssl", | ||
"plan", | ||
"card", | ||
"invite", | ||
"revoke", | ||
"encrypt", | ||
"config", | ||
"dns", | ||
"zone", | ||
"certs", | ||
"bust" | ||
] | ||
if (commands.indexOf(cmd) !== -1) { | ||
argv._.shift() | ||
surge[cmd]({})(argv) | ||
} else if(config.default && commands.indexOf(config.default) !== -1 ){ | ||
surge[config.default]({})(argv) | ||
} else if(configuration.default && commands.indexOf(configuration.default) !== -1 ){ | ||
surge[configuration.default]({})(argv) | ||
} | ||
} | ||
var stub = function(req, next){ next(); } | ||
var stub = function(req, next){ | ||
return next(); | ||
} | ||
@@ -143,3 +191,3 @@ surge.token = function(hooks){ | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -163,3 +211,3 @@ read: read | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -180,3 +228,3 @@ read: read | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -201,7 +249,7 @@ read: read | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, space, | ||
endpoint, pkg, help, version, space, | ||
preAuth, creds, welcome, auth, authInfo, postAuth, shorthand, | ||
preProject, project, postProject, | ||
preDomain, discovery.setDomainFromCname, discovery.suggestDomainFromGenerator, domain, postDomain, | ||
preSize, size, postSize, | ||
preDomain, discovery.setDomainFromCname, discovery.suggestDomainFromGenerator, domain, postDomain, | ||
prePublish, protocol, deploy, postPublish, ipaddress | ||
@@ -212,3 +260,3 @@ ] | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -229,3 +277,3 @@ read: read | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -249,3 +297,3 @@ read: read | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -257,2 +305,135 @@ read: read | ||
surge.rollback = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, welcome, auth, postAuth, | ||
rollback, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.rollfore = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, welcome, auth, postAuth, | ||
rollfore, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.switch = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, welcome, auth, postAuth, shorthand, | ||
cut, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.cutover = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, welcome, auth, postAuth, | ||
cutover, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.discard = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, welcome, auth, postAuth, | ||
discard, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.bust = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, welcome, auth, postAuth, | ||
bust, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.select = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, welcome, auth, postAuth, shorthand, | ||
select, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.teardown = function(hooks){ | ||
@@ -271,3 +452,3 @@ var hooks = hooks || {} | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -292,3 +473,3 @@ read: read | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -315,3 +496,3 @@ read: read | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -336,3 +517,3 @@ read: read | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -357,3 +538,3 @@ read: read | ||
skin({ | ||
config: config, | ||
configuration: configuration, | ||
argv: argv, | ||
@@ -365,4 +546,145 @@ read: read | ||
surge.invite = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, space, | ||
preAuth, creds, auth, postAuth, | ||
invite, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.revoke = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, space, | ||
preAuth, creds, auth, postAuth, | ||
revoke, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
// endpoint, pkg, help, version, space, | ||
// preAuth, creds, welcome, auth, authInfo, postAuth, shorthand, | ||
// preProject, project, postProject, | ||
// preDomain, discovery.setDomainFromCname, discovery.suggestDomainFromGenerator, domain, postDomain, | ||
// preSize, size, postSize, | ||
// prePublish, protocol, deploy, postPublish, ipaddress | ||
surge.encrypt = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, space, | ||
preAuth, creds, welcome, auth, authInfo, postAuth, | ||
// discovery.setDomainFromCname, discovery.suggestDomainFromGenerator, domain, | ||
encrypt, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.certs = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, space, | ||
preAuth, creds, auth, postAuth, | ||
certs, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.config = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
endpoint, pkg, help, version, space, | ||
preAuth, creds, auth, postAuth, | ||
config, space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.dns = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, auth, postAuth, | ||
dns("dns"), space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
surge.zone = function(hooks){ | ||
var hooks = hooks || {} | ||
var preAuth = hooks.preAuth || stub | ||
var postAuth = hooks.postAuth || stub | ||
var onion = [ | ||
whitelist, endpoint, pkg, help, version, | ||
preAuth, creds, auth, postAuth, | ||
dns("zone"), space | ||
] | ||
return function(){ | ||
var argv = parse(arguments[arguments.length -1]) | ||
skin({ | ||
configuration: configuration, | ||
argv: argv, | ||
read: read | ||
}, onion) | ||
} | ||
} | ||
return surge | ||
} |
{ | ||
"name": "surge", | ||
"version": "0.21.7", | ||
"version": "0.22.0", | ||
"description": "CDN for front-end developers", | ||
"author": "Brock Whitten <brock@chloi.io>", | ||
"bin": "./lib/cli.js", | ||
"bin": "./bin/surge", | ||
"dependencies": { | ||
@@ -15,9 +15,7 @@ "cli-table3": "^0.5.1", | ||
"netrc": "0.1.4", | ||
"progress": "1.1.8", | ||
"progress": "2.0.3", | ||
"read": "1.0.5", | ||
"request": "^2.88.0", | ||
"split": "0.3.1", | ||
"surge-fstream-ignore": "^1.0.6", | ||
"surge-ignore": "0.2.0", | ||
"tarr": "1.1.0", | ||
"surge-sdk": "0.3.0", | ||
"url-parse-as-address": "1.0.0" | ||
@@ -27,3 +25,3 @@ }, | ||
"commander": "2.9.0", | ||
"mocha": "^8.2.1", | ||
"mocha": "8.3.0", | ||
"nixt": "^0.5.1", | ||
@@ -30,0 +28,0 @@ "should": "7.1.0", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
175887
13
85
5099
37
3
+ Addedsurge-sdk@0.3.0
+ Addedprogress@2.0.3(transitive)
+ Addedsplit@1.0.1(transitive)
+ Addedsurge-ignore@0.3.0(transitive)
+ Addedsurge-sdk@0.3.0(transitive)
+ Addedzlib@1.0.5(transitive)
- Removedsplit@0.3.1
- Removedsurge-fstream-ignore@^1.0.6
- Removedtarr@1.1.0
- Removedprogress@1.1.8(transitive)
- Removedsplit@0.3.1(transitive)
Updatedprogress@2.0.3