Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
async function getAvailableHaulPreset(
progress: Ora,
targetHaulPreset: string
): Promise {
// Stop searching on 0.59 - there's no preset below 0.59.
if (targetHaulPreset.includes('0.59')) {
return targetHaulPreset;
}
try {
await npmFetch(targetHaulPreset);
return targetHaulPreset;
} catch (error) {
if (error.statusCode === 404) {
progress.info(
`${targetHaulPreset} not available. Trying older version...`
);
const previousHaulPreset = targetHaulPreset.replace(/-0\.\d+$/, match => {
const [major, minor] = match.slice(1).split('.');
return `-${major}.${parseInt(minor, 10) - 1}`;
});
return await getAvailableHaulPreset(progress, previousHaulPreset);
}
return targetHaulPreset;
}
}
return libaccess.lsPackages(username, opts).then(access => {
// do a bit of filtering at this point, so that we don't need
// to fetch versions for more than one thing, but also don't
// accidentally a whole project.
let pkgs = Object.keys(access)
if (!cliOpts.partialWord || !pkgs.length) { return pkgs }
const pp = npa(cliOpts.partialWord).name
pkgs = pkgs.filter(p => !p.indexOf(pp))
if (pkgs.length > 1) return pkgs
return npmFetch.json(npa(pkgs[0]).escapedName, opts).then(doc => {
const vers = Object.keys(doc.versions)
if (!vers.length) {
return pkgs
} else {
return vers.map(v => `${pkgs[0]}@${v}`)
}
})
})
}).nodeify(cb)
function annotateManifest (spec, manifest, opts) {
const shasum = manifest.dist && manifest.dist.shasum
manifest._integrity = manifest.dist && manifest.dist.integrity
manifest._shasum = shasum
if (!manifest._integrity && shasum) {
// Use legacy dist.shasum field if available.
manifest._integrity = ssri.fromHex(shasum, 'sha1').toString()
}
manifest._resolved = (
manifest.dist && manifest.dist.tarball
)
if (!manifest._resolved) {
const registry = fetch.pickRegistry(spec, opts)
const uri = registry.replace(/\/?$/, '/') + spec.escapedName
const err = new Error(
`Manifest for ${manifest.name}@${manifest.version} from ${uri} is missing a tarball url (pkg.dist.tarball). Guessing a default.`
)
err.code = 'ENOTARBALL'
err.manifest = manifest
if (!manifest._warnings) { manifest._warnings = [] }
manifest._warnings.push(err.message)
manifest._resolved =
`${registry}/${manifest.name}/-/${manifest.name}-${manifest.version}.tgz`
}
return manifest
}
constructor (spec, opts) {
super(spec, opts)
// try to use corgis if available
this.fullMetadata = !!opts.fullMetadata
// handle case when npm-package-arg guesses wrong.
if (this.spec.type === 'tag' &&
this.spec.rawSpec === '' &&
this.tag !== 'latest')
this.spec = npa(`${this.spec.name}@${this.tag}`)
this.registry = fetch.pickRegistry(spec, opts)
this.packumentUrl = this.registry.replace(/\/*$/, '/') +
this.spec.escapedName
// XXX pacote <=9 has some logic to ignore opts.resolved if
// the resolved URL doesn't go to the same registry.
// Consider reproducing that here, to throw away this.resolved
// in that case.
}
function tarball (spec, opts) {
opts = optCheck(opts)
const registry = fetch.pickRegistry(spec, opts)
const stream = new PassThrough()
let mani
if (
opts.resolved &&
// spec.type === 'version' &&
opts.resolved.indexOf(registry) === 0
) {
// fakeChild is a shortcut to avoid looking up a manifest!
mani = BB.resolve({
name: spec.name,
version: spec.fetchSpec,
_integrity: opts.integrity,
_resolved: opts.resolved,
_fakeChild: true
})
} else {
const body = {
_id: 'org.couchdb.user:' + username,
name: username,
password: password,
type: 'user',
roles: [],
date: new Date().toISOString()
}
const logObj = {}
Object.keys(body).forEach(k => {
logObj[k] = k === 'password' ? 'XXXXX' : body[k]
})
process.emit('log', 'verbose', 'login', 'before first PUT', logObj)
const target = '-/user/org.couchdb.user:' + encodeURIComponent(username)
return fetch.json(target, opts.concat({
method: 'PUT',
body
})).catch(err => {
if (err.code === 'E400') {
err.message = `There is no user with the username "${username}".`
throw err
}
if (err.code !== 'E409') throw err
return fetch.json(target, opts.concat({
query: {write: true}
})).then(result => {
Object.keys(result).forEach(function (k) {
if (!body[k] || k === 'roles') {
body[k] = result[k]
}
})
_id: 'org.couchdb.user:' + username,
name: username,
password: password,
email: email,
type: 'user',
roles: [],
date: new Date().toISOString()
}
const logObj = {}
Object.keys(body).forEach(k => {
logObj[k] = k === 'password' ? 'XXXXX' : body[k]
})
process.emit('log', 'verbose', 'adduser', 'before first PUT', logObj)
const target = '/-/user/org.couchdb.user:' + encodeURIComponent(username)
return fetch.json(target, opts.concat({
method: 'PUT',
body
})).then(result => {
result.username = username
return result
})
}
return new opts.Promise((resolve, reject) => {
validate('SSSO|SSZO', [org, user, role, opts])
user = user.replace(/^@?/, '')
org = org.replace(/^@?/, '')
fetch.json(`/-/org/${eu(org)}/user`, opts.concat({
method: 'PUT',
body: { user, role }
})).then(resolve, reject)
}).then(ret => Object.assign(new MembershipDetail(), ret))
}
function get (opts) {
validate('O', arguments)
return fetch.json('/-/npm/v1/user', opts)
}
cmd.find = (id, opts) => {
opts = HooksConfig(opts)
validate('SO', [id, opts])
return fetch.json(`/-/npm/v1/hooks/hook/${eu(id)}`, opts)
}