mirror of
https://github.com/nodejs/node.git
synced 2025-05-17 18:26:24 +00:00

PR-URL: https://github.com/nodejs/node/pull/25804 Reviewed-By: Myles Borins <myles.borins@gmail.com>
72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
'use strict'
|
|
|
|
const eu = encodeURIComponent
|
|
const fetch = require('npm-registry-fetch')
|
|
const figgyPudding = require('figgy-pudding')
|
|
const getStream = require('get-stream')
|
|
const validate = require('aproba')
|
|
|
|
const OrgConfig = figgyPudding({
|
|
Promise: {default: () => Promise}
|
|
})
|
|
|
|
// From https://github.com/npm/registry/blob/master/docs/orgs/memberships.md
|
|
const cmd = module.exports = {}
|
|
|
|
class MembershipDetail {}
|
|
cmd.set = (org, user, role, opts) => {
|
|
if (typeof role === 'object' && !opts) {
|
|
opts = role
|
|
role = undefined
|
|
}
|
|
opts = OrgConfig(opts)
|
|
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))
|
|
}
|
|
|
|
cmd.rm = (org, user, opts) => {
|
|
opts = OrgConfig(opts)
|
|
return new opts.Promise((resolve, reject) => {
|
|
validate('SSO', [org, user, opts])
|
|
user = user.replace(/^@?/, '')
|
|
org = org.replace(/^@?/, '')
|
|
fetch(`/-/org/${eu(org)}/user`, opts.concat({
|
|
method: 'DELETE',
|
|
body: {user},
|
|
ignoreBody: true
|
|
})).then(resolve, reject)
|
|
}).then(() => null)
|
|
}
|
|
|
|
class Roster {}
|
|
cmd.ls = (org, opts) => {
|
|
opts = OrgConfig(opts)
|
|
return new opts.Promise((resolve, reject) => {
|
|
getStream.array(cmd.ls.stream(org, opts)).then(entries => {
|
|
const obj = {}
|
|
for (let [key, val] of entries) {
|
|
obj[key] = val
|
|
}
|
|
return obj
|
|
}).then(resolve, reject)
|
|
}).then(ret => Object.assign(new Roster(), ret))
|
|
}
|
|
|
|
cmd.ls.stream = (org, opts) => {
|
|
opts = OrgConfig(opts)
|
|
validate('SO', [org, opts])
|
|
org = org.replace(/^@?/, '')
|
|
return fetch.json.stream(`/-/org/${eu(org)}/user`, '*', opts.concat({
|
|
mapJson (value, [key]) {
|
|
return [key, value]
|
|
}
|
|
}))
|
|
}
|