Skip to content
This repository was archived by the owner on Aug 11, 2021. It is now read-only.

Commit 0269da7

Browse files
committed
team: implemented api for npm team
1 parent efe7e5a commit 0269da7

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

lib/team.js

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
module.exports = team
2+
3+
var assert = require('assert')
4+
var url = require('url')
5+
6+
var subcommands = {}
7+
8+
function team (sub, uri, params, cb) {
9+
teamAssertions(sub, uri, params, cb)
10+
return subcommands[sub].call(this, uri, params, cb)
11+
}
12+
13+
subcommands.create = function (uri, params, cb) {
14+
return this.request(apiUri(uri, 'org', params.scope, 'team'), {
15+
method: 'PUT',
16+
auth: params.auth,
17+
body: JSON.stringify({
18+
name: params.team
19+
})
20+
}, cb)
21+
}
22+
23+
subcommands.destroy = function (uri, params, cb) {
24+
return this.request(apiUri(uri, 'team', params.scope, params.team), {
25+
method: 'DELETE',
26+
auth: params.auth
27+
}, cb)
28+
}
29+
30+
subcommands.add = function (uri, params, cb) {
31+
return this.request(apiUri(uri, 'team', params.scope, params.team, 'user'), {
32+
method: 'PUT',
33+
auth: params.auth,
34+
body: JSON.stringify({
35+
user: params.user
36+
})
37+
}, cb)
38+
}
39+
40+
subcommands.rm = function (uri, params, cb) {
41+
return this.request(apiUri(uri, 'team', params.scope, params.team, 'user'), {
42+
method: 'DELETE',
43+
auth: params.auth,
44+
body: JSON.stringify({
45+
user: params.user
46+
})
47+
}, cb)
48+
}
49+
50+
subcommands.ls = function (uri, params, cb) {
51+
var uriParams = '?format=cli'
52+
if (params.team) {
53+
var reqUri = apiUri(
54+
uri, 'team', params.scope, params.team, 'user') + uriParams
55+
return this.request(reqUri, {
56+
method: 'GET',
57+
auth: params.auth
58+
}, cb)
59+
} else {
60+
return this.request(apiUri(uri, 'org', params.scope, 'team') + uriParams, {
61+
method: 'GET',
62+
auth: params.auth
63+
}, cb)
64+
}
65+
}
66+
67+
// TODO - we punted this to v2
68+
// subcommands.edit = function (uri, params, cb) {
69+
// return this.request(apiUri(uri, 'team', params.scope, params.team, 'user'), {
70+
// method: 'POST',
71+
// auth: params.auth,
72+
// body: JSON.stringify({
73+
// users: params.users
74+
// })
75+
// }, cb)
76+
// }
77+
78+
function apiUri (registryUri) {
79+
var path = Array.prototype.slice.call(arguments, 1)
80+
.map(encodeURIComponent)
81+
.join('/')
82+
return url.resolve(registryUri, '-/' + path)
83+
}
84+
85+
function teamAssertions (subcommand, uri, params, cb) {
86+
assert(subcommand, 'subcommand is required')
87+
assert(subcommands.hasOwnProperty(subcommand),
88+
'team subcommand must be one of ' + Object.keys(subcommands))
89+
assert(typeof uri === 'string', 'registry URI is required')
90+
assert(typeof params === 'object', 'params are required')
91+
assert(typeof params.auth === 'object', 'auth is required')
92+
assert(typeof params.scope === 'string', 'scope is required')
93+
assert(!cb || typeof cb === 'function', 'callback must be a function')
94+
if (subcommand !== 'ls') {
95+
assert(typeof params.team === 'string', 'team name is required')
96+
}
97+
if (subcommand === 'rm' || subcommand === 'add') {
98+
assert(typeof params.user === 'string', 'user is required')
99+
}
100+
if (subcommand === 'edit') {
101+
assert(typeof params.users === 'object' &&
102+
params.users.length != null,
103+
'users is required')
104+
}
105+
}

0 commit comments

Comments
 (0)