X7ROOT File Manager
Current Path:
/opt/alt/alt-nodejs24/root/usr/lib/node_modules/npm/lib/commands
opt
/
alt
/
alt-nodejs24
/
root
/
usr
/
lib
/
node_modules
/
npm
/
lib
/
commands
/
??
..
??
access.js
(6.17 KB)
??
adduser.js
(1.29 KB)
??
audit.js
(3.14 KB)
??
bugs.js
(847 B)
??
cache.js
(11.52 KB)
??
ci.js
(4.24 KB)
??
completion.js
(11.17 KB)
??
config.js
(11.49 KB)
??
dedupe.js
(1.43 KB)
??
deprecate.js
(2.43 KB)
??
diff.js
(8.01 KB)
??
dist-tag.js
(5.52 KB)
??
docs.js
(449 B)
??
doctor.js
(9.99 KB)
??
edit.js
(1.72 KB)
??
exec.js
(3.42 KB)
??
explain.js
(3.55 KB)
??
explore.js
(2.12 KB)
??
find-dupes.js
(634 B)
??
fund.js
(6.42 KB)
??
get.js
(538 B)
??
help-search.js
(5.53 KB)
??
help.js
(3.67 KB)
??
init.js
(7.07 KB)
??
install-ci-test.js
(373 B)
??
install-test.js
(370 B)
??
install.js
(5.14 KB)
??
link.js
(5.27 KB)
??
ll.js
(234 B)
??
login.js
(1.29 KB)
??
logout.js
(1.42 KB)
??
ls.js
(16.77 KB)
??
org.js
(3.98 KB)
??
outdated.js
(7.95 KB)
??
owner.js
(5.95 KB)
??
pack.js
(2.73 KB)
??
ping.js
(873 B)
??
pkg.js
(3.6 KB)
??
prefix.js
(309 B)
??
profile.js
(10.45 KB)
??
prune.js
(799 B)
??
publish.js
(9.52 KB)
??
query.js
(3.75 KB)
??
rebuild.js
(2.15 KB)
??
repo.js
(1.24 KB)
??
restart.js
(303 B)
??
root.js
(295 B)
??
run.js
(6.26 KB)
??
sbom.js
(4.48 KB)
??
search.js
(1.83 KB)
??
set.js
(632 B)
??
shrinkwrap.js
(2.65 KB)
??
star.js
(1.88 KB)
??
stars.js
(1.03 KB)
??
start.js
(293 B)
??
stop.js
(288 B)
??
team.js
(4.33 KB)
??
test.js
(288 B)
??
token.js
(7.96 KB)
??
trust
??
undeprecate.js
(302 B)
??
uninstall.js
(1.49 KB)
??
unpublish.js
(5.4 KB)
??
unstar.js
(183 B)
??
update.js
(1.7 KB)
??
version.js
(3.54 KB)
??
view.js
(13.5 KB)
??
whoami.js
(527 B)
Editing: token.js
const { log, output, META } = require('proc-log') const fetch = require('npm-registry-fetch') const { otplease } = require('../utils/auth.js') const readUserInfo = require('../utils/read-user-info.js') const BaseCommand = require('../base-cmd.js') async function paginate (href, opts, items = []) { while (href) { const result = await fetch.json(href, opts) items = items.concat(result.objects) href = result.urls.next } return items } class Token extends BaseCommand { static description = 'Manage your authentication tokens' static name = 'token' static usage = ['list', 'revoke <id|token>', 'create'] static params = ['name', 'token-description', 'expires', 'packages', 'packages-all', 'scopes', 'orgs', 'packages-and-scopes-permission', 'orgs-permission', 'cidr', 'bypass-2fa', 'password', 'registry', 'otp', 'read-only', ] static async completion (opts) { const argv = opts.conf.argv.remain const subcommands = ['list', 'revoke', 'create'] if (argv.length === 2) { return subcommands } if (subcommands.includes(argv[2])) { return [] } throw new Error(argv[2] + ' not recognized') } async exec (args) { if (args.length === 0) { return this.list() } switch (args[0]) { case 'list': case 'ls': return this.list() case 'rm': case 'delete': case 'revoke': case 'remove': return this.rm(args.slice(1)) case 'create': return this.create(args.slice(1)) default: throw this.usageError(`${args[0]} is not a recognized subcommand.`) } } async list () { const json = this.npm.config.get('json') const parseable = this.npm.config.get('parseable') log.info('token', 'getting list') const tokens = await paginate('/-/npm/v1/tokens', this.npm.flatOptions) if (json) { output.buffer(tokens) return } if (parseable) { output.standard(['key', 'token', 'created', 'readonly', 'CIDR whitelist'].join('\t')) tokens.forEach(token => { output.standard( [ token.key, token.token, token.created, token.readonly ? 'true' : 'false', token.cidr_whitelist ? token.cidr_whitelist.join(',') : '', ].join('\t') ) }) return } this.generateTokenIds(tokens, 6) const chalk = this.npm.chalk for (const token of tokens) { const created = String(token.created).slice(0, 10) output.standard(`${chalk.blue('Token')} ${token.token}… with id ${chalk.cyan(token.id)} created ${created}`) if (token.cidr_whitelist) { output.standard(`with IP whitelist: ${chalk.green(token.cidr_whitelist.join(','))}`) } output.standard() } } async rm (args) { if (args.length === 0) { throw this.usageError('`<tokenKey>` argument is required.') } const json = this.npm.config.get('json') const parseable = this.npm.config.get('parseable') const toRemove = [] log.info('token', `removing ${toRemove.length} tokens`) const tokens = await paginate('/-/npm/v1/tokens', this.npm.flatOptions) for (const id of args) { const matches = tokens.filter(token => token.key.indexOf(id) === 0) if (matches.length === 1) { toRemove.push(matches[0].key) } else if (matches.length > 1) { throw new Error( `Token ID "${id}" was ambiguous, a new token may have been created since you last ran \`npm token list\`.` ) } else { const tokenMatches = tokens.some(t => id.indexOf(t.token) === 0) if (!tokenMatches) { throw new Error(`Unknown token id or value "${id}".`) } toRemove.push(id) } } for (const tokenKey of toRemove) { await otplease(this.npm, this.npm.flatOptions, opts => fetch(`/-/npm/v1/tokens/token/${tokenKey}`, { ...opts, method: 'DELETE', ignoreBody: true, }) ) } if (json) { output.buffer(toRemove) } else if (parseable) { output.standard(toRemove.join('\t')) } else { output.standard('Removed ' + toRemove.length + ' token' + (toRemove.length !== 1 ? 's' : '')) } } async create () { const json = this.npm.config.get('json') const parseable = this.npm.config.get('parseable') const cidr = this.npm.config.get('cidr') const name = this.npm.config.get('name') const tokenDescription = this.npm.config.get('token-description') const expires = this.npm.config.get('expires') const packages = this.npm.config.get('packages') const packagesAll = this.npm.config.get('packages-all') const scopes = this.npm.config.get('scopes') const orgs = this.npm.config.get('orgs') const packagesAndScopesPermission = this.npm.config.get('packages-and-scopes-permission') const orgsPermission = this.npm.config.get('orgs-permission') const bypassTwoFactor = this.npm.config.get('bypass-2fa') let password = this.npm.config.get('password') const validCIDR = await this.validateCIDRList(cidr) /* istanbul ignore if - skip testing read input */ if (!password) { password = await readUserInfo.password() } const tokenData = { name: name, password: password, } if (tokenDescription) { tokenData.description = tokenDescription } if (packages?.length > 0) { tokenData.packages = packages } if (packagesAll) { tokenData.packages_all = true } if (scopes?.length > 0) { tokenData.scopes = scopes } if (orgs?.length > 0) { tokenData.orgs = orgs } if (packagesAndScopesPermission) { tokenData.packages_and_scopes_permission = packagesAndScopesPermission } if (orgsPermission) { tokenData.orgs_permission = orgsPermission } // Add expiration in days if (expires) { tokenData.expires = parseInt(expires, 10) } // Add optional fields if (validCIDR?.length > 0) { tokenData.cidr_whitelist = validCIDR } if (bypassTwoFactor) { tokenData.bypass_2fa = true } log.info('token', 'creating') const result = await otplease(this.npm, this.npm.flatOptions, opts => fetch.json('/-/npm/v1/tokens', { ...opts, method: 'POST', body: tokenData, }) ) delete result.key delete result.updated if (json) { output.buffer(result) } else if (parseable) { Object.keys(result).forEach(k => output.standard(k + '\t' + result[k])) } else { const chalk = this.npm.chalk output.standard(`Created token ${result.token}`, { [META]: true, redact: false }) if (result.cidr_whitelist?.length) { output.standard(`with IP whitelist: ${chalk.green(result.cidr_whitelist.join(','))}`) } if (result.expires) { output.standard(`expires: ${result.expires}`) } } } invalidCIDRError (msg) { return Object.assign(new Error(msg), { code: 'EINVALIDCIDR' }) } generateTokenIds (tokens, minLength) { for (const token of tokens) { token.id = token.key for (let ii = minLength; ii < token.key.length; ++ii) { const match = tokens.some( ot => ot !== token && ot.key.slice(0, ii) === token.key.slice(0, ii) ) if (!match) { token.id = token.key.slice(0, ii) break } } } } async validateCIDRList (cidrs) { const { v4: isCidrV4, v6: isCidrV6 } = await import('is-cidr') const maybeList = [].concat(cidrs).filter(Boolean) const list = maybeList.length === 1 ? maybeList[0].split(/,\s*/) : maybeList for (const cidr of list) { if (isCidrV6(cidr)) { throw this.invalidCIDRError( `CIDR whitelist can only contain IPv4 addresses, ${cidr} is IPv6` ) } if (!isCidrV4(cidr)) { throw this.invalidCIDRError(`CIDR whitelist contains invalid CIDR entry: ${cidr}`) } } return list } } module.exports = Token
Upload File
Create Folder