You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.1 KiB
139 lines
3.1 KiB
const Now = require('../lib')
|
|
|
|
module.exports = class Teams extends Now {
|
|
async create({ slug }) {
|
|
return this.retry(async (bail, attempt) => {
|
|
if (this._debug) {
|
|
console.time(`> [debug] #${attempt} POST /teams}`)
|
|
}
|
|
|
|
const res = await this._fetch(`/teams`, {
|
|
method: 'POST',
|
|
body: {
|
|
slug
|
|
}
|
|
})
|
|
|
|
if (this._debug) {
|
|
console.timeEnd(`> [debug] #${attempt} POST /teams`)
|
|
}
|
|
|
|
if (res.status === 403) {
|
|
return bail(new Error('Unauthorized'))
|
|
}
|
|
|
|
const body = await res.json()
|
|
|
|
if (res.status === 400) {
|
|
const e = new Error(body.error.message)
|
|
e.code = body.error.code
|
|
return bail(e)
|
|
} else if (res.status !== 200) {
|
|
const e = new Error(body.error.message)
|
|
e.code = body.error.code
|
|
throw e
|
|
}
|
|
|
|
return body
|
|
})
|
|
}
|
|
|
|
async edit({ id, slug, name }) {
|
|
return this.retry(async (bail, attempt) => {
|
|
if (this._debug) {
|
|
console.time(`> [debug] #${attempt} PATCH /teams/${id}}`)
|
|
}
|
|
|
|
const payload = {}
|
|
if (name) {
|
|
payload.name = name
|
|
}
|
|
if (slug) {
|
|
payload.slug = slug
|
|
}
|
|
|
|
const res = await this._fetch(`/teams/${id}`, {
|
|
method: 'PATCH',
|
|
body: payload
|
|
})
|
|
|
|
if (this._debug) {
|
|
console.timeEnd(`> [debug] #${attempt} PATCH /teams/${id}`)
|
|
}
|
|
|
|
if (res.status === 403) {
|
|
return bail(new Error('Unauthorized'))
|
|
}
|
|
|
|
const body = await res.json()
|
|
|
|
if (res.status === 400) {
|
|
const e = new Error(body.error.message)
|
|
e.code = body.error.code
|
|
return bail(e)
|
|
} else if (res.status !== 200) {
|
|
const e = new Error(body.error.message)
|
|
e.code = body.error.code
|
|
throw e
|
|
}
|
|
|
|
return body
|
|
})
|
|
}
|
|
|
|
async inviteUser({ teamId, email }) {
|
|
return this.retry(async (bail, attempt) => {
|
|
if (this._debug) {
|
|
console.time(`> [debug] #${attempt} POST /teams/${teamId}/members}`)
|
|
}
|
|
const res = await this._fetch(`/teams/${teamId}/members`, {
|
|
method: 'POST',
|
|
body: {
|
|
email
|
|
}
|
|
})
|
|
|
|
if (this._debug) {
|
|
console.timeEnd(`> [debug] #${attempt} POST /teams/${teamId}/members}`)
|
|
}
|
|
|
|
if (res.status === 403) {
|
|
return bail(new Error('Unauthorized'))
|
|
}
|
|
|
|
const body = await res.json()
|
|
|
|
if (res.status === 400) {
|
|
const e = new Error(body.error.message)
|
|
e.code = body.error.code
|
|
return bail(e)
|
|
} else if (res.status !== 200) {
|
|
const e = new Error(body.error.message)
|
|
e.code = body.error.code
|
|
throw e
|
|
}
|
|
|
|
return body
|
|
})
|
|
}
|
|
|
|
async ls() {
|
|
return this.retry(async (bail, attempt) => {
|
|
if (this._debug) {
|
|
console.time(`> [debug] #${attempt} GET /teams}`)
|
|
}
|
|
|
|
const res = await this._fetch(`/teams`)
|
|
|
|
if (this._debug) {
|
|
console.timeEnd(`> [debug] #${attempt} GET /teams`)
|
|
}
|
|
|
|
if (res.status === 403) {
|
|
return bail(new Error('Unauthorized'))
|
|
}
|
|
|
|
return res.json()
|
|
})
|
|
}
|
|
}
|
|
|