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.
141 lines
3.1 KiB
141 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();
|
|
});
|
|
}
|
|
};
|
|
|