• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict'
2
3const eu = encodeURIComponent
4const fetch = require('npm-registry-fetch')
5const validate = require('aproba')
6
7// From https://github.com/npm/registry/blob/master/docs/orgs/memberships.md
8const cmd = module.exports
9
10class MembershipDetail {}
11cmd.set = (org, user, role, opts = {}) => {
12  if (
13    typeof role === 'object' &&
14    Object.keys(opts).length === 0
15  ) {
16    opts = role
17    role = undefined
18  }
19  validate('SSSO|SSZO', [org, user, role, opts])
20  user = user.replace(/^@?/, '')
21  org = org.replace(/^@?/, '')
22  return fetch.json(`/-/org/${eu(org)}/user`, {
23    ...opts,
24    method: 'PUT',
25    body: { user, role },
26  }).then(ret => Object.assign(new MembershipDetail(), ret))
27}
28
29cmd.rm = (org, user, opts = {}) => {
30  validate('SSO', [org, user, opts])
31  user = user.replace(/^@?/, '')
32  org = org.replace(/^@?/, '')
33  return fetch(`/-/org/${eu(org)}/user`, {
34    ...opts,
35    method: 'DELETE',
36    body: { user },
37    ignoreBody: true,
38  }).then(() => null)
39}
40
41class Roster {}
42cmd.ls = (org, opts = {}) => {
43  return cmd.ls.stream(org, opts)
44    .collect()
45    .then(data => data.reduce((acc, [key, val]) => {
46      if (!acc) {
47        acc = {}
48      }
49      acc[key] = val
50      return acc
51    }, null))
52    .then(ret => Object.assign(new Roster(), ret))
53}
54
55cmd.ls.stream = (org, opts = {}) => {
56  validate('SO', [org, opts])
57  org = org.replace(/^@?/, '')
58  return fetch.json.stream(`/-/org/${eu(org)}/user`, '*', {
59    ...opts,
60    mapJSON: (value, [key]) => {
61      return [key, value]
62    },
63  })
64}
65