UNPKG

2.37 kBJavaScriptView Raw
1let _ = require('lodash')
2let cli = require('heroku-cli-util')
3let error = require('./error')
4
5let getOwner = function (owner) {
6 if (isteamApp(owner)) {
7 return owner.split('@herokumanager.com')[0]
8 }
9 return owner
10}
11
12let isteamApp = function (owner) {
13 return (/@herokumanager\.com$/.test(owner))
14}
15
16let isValidEmail = function (email) {
17 return /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(email)
18}
19
20let printGroups = function (group, type = {label: 'Team'}) {
21 group = _.sortBy(group, 'name')
22 cli.table(group, {
23 columns: [
24 {key: 'name', label: type.label, format: o => cli.color.green(o)},
25 {key: 'role', label: 'Role', format: r => r}
26 ],
27 printHeader: false
28 })
29}
30
31let printGroupsJSON = function (group) {
32 cli.log(JSON.stringify(group, null, 2))
33}
34
35let teamInfo = async function (context, heroku) {
36 let teamName = context.flags.team
37 if (!teamName) error.exit(1, 'No team or org specified.\nRun this command with --team')
38 return await heroku.get(`/teams/${teamName}`);
39}
40
41let addMemberToTeam = async function (email, role, groupName, heroku, method = 'PUT') {
42 let request = heroku.request({
43 method: method,
44 path: `/teams/${groupName}/members`,
45 body: {email, role}
46 })
47 await cli.action(`Adding ${cli.color.cyan(email)} to ${cli.color.magenta(groupName)} as ${cli.color.green(role)}`, request)
48}
49
50let warnIfAtTeamMemberLimit = async function (teamInfo, groupName, context, heroku) {
51 // Users receive `You'll be billed monthly for teams over 5 members.`
52 const FREE_TEAM_LIMIT = 6
53
54 if (teamInfo.type === 'team') {
55 let membersAndInvites = {
56 invites: await heroku.request({
57 headers: {
58 Accept: 'application/vnd.heroku+json; version=3.team-invitations'
59 },
60 method: 'GET',
61 path: `/teams/${groupName}/invitations`
62 }),
63 members: await heroku.get(`/teams/${groupName}/members`)
64 }
65 const membersCount = membersAndInvites.invites.length + membersAndInvites.members.length
66 if (membersCount === FREE_TEAM_LIMIT) cli.warn("You'll be billed monthly for teams over 5 members.")
67 }
68}
69
70module.exports = {
71 addMemberToTeam,
72 getOwner,
73 isteamApp,
74 isValidEmail,
75 teamInfo,
76 printGroups,
77 printGroupsJSON,
78 warnIfAtTeamMemberLimit
79}