UNPKG

node-appwrite

Version:

Appwrite is an open-source self-hosted backend server that abstract and simplify complex and repetitive development tasks behind a very simple REST API

480 lines (408 loc) 15 kB
const Service = require('../service.js'); const AppwriteException = require('../exception.js'); const InputFile = require('../inputFile.js'); const client = require('../client.js'); const Stream = require('stream'); const { promisify } = require('util'); const fs = require('fs'); const { File } = require('undici'); const Query = require('../query.js'); class Teams extends Service { constructor(client) { super(client); } /** * List teams * * Get a list of all the teams in which the current user is a member. You can * use the parameters to filter your results. * * @param {string[]} queries * @param {string} search * @throws {AppwriteException} * @returns {Promise} */ async list(queries, search) { const apiPath = '/teams'; let payload = {}; if (typeof queries !== 'undefined') { payload['queries'] = queries; } if (typeof search !== 'undefined') { payload['search'] = search; } return await this.client.call('get', apiPath, { 'content-type': 'application/json', }, payload); } /** * Create team * * Create a new team. The user who creates the team will automatically be * assigned as the owner of the team. Only the users with the owner role can * invite new members, add new owners and delete or update the team. * * @param {string} teamId * @param {string} name * @param {string[]} roles * @throws {AppwriteException} * @returns {Promise} */ async create(teamId, name, roles) { const apiPath = '/teams'; let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof name === 'undefined') { throw new AppwriteException('Missing required parameter: "name"'); } if (typeof teamId !== 'undefined') { payload['teamId'] = teamId; } if (typeof name !== 'undefined') { payload['name'] = name; } if (typeof roles !== 'undefined') { payload['roles'] = roles; } return await this.client.call('post', apiPath, { 'content-type': 'application/json', }, payload); } /** * Get team * * Get a team by its ID. All team members have read access for this resource. * * @param {string} teamId * @throws {AppwriteException} * @returns {Promise} */ async get(teamId) { const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } return await this.client.call('get', apiPath, { 'content-type': 'application/json', }, payload); } /** * Update name * * Update the team's name by its unique ID. * * @param {string} teamId * @param {string} name * @throws {AppwriteException} * @returns {Promise} */ async updateName(teamId, name) { const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof name === 'undefined') { throw new AppwriteException('Missing required parameter: "name"'); } if (typeof name !== 'undefined') { payload['name'] = name; } return await this.client.call('put', apiPath, { 'content-type': 'application/json', }, payload); } /** * Delete team * * Delete a team using its ID. Only team members with the owner role can * delete the team. * * @param {string} teamId * @throws {AppwriteException} * @returns {Promise} */ async delete(teamId) { const apiPath = '/teams/{teamId}'.replace('{teamId}', teamId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } return await this.client.call('delete', apiPath, { 'content-type': 'application/json', }, payload); } /** * List team memberships * * Use this endpoint to list a team's members using the team's ID. All team * members have read access to this endpoint. * * @param {string} teamId * @param {string[]} queries * @param {string} search * @throws {AppwriteException} * @returns {Promise} */ async listMemberships(teamId, queries, search) { const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof queries !== 'undefined') { payload['queries'] = queries; } if (typeof search !== 'undefined') { payload['search'] = search; } return await this.client.call('get', apiPath, { 'content-type': 'application/json', }, payload); } /** * Create team membership * * Invite a new member to join your team. Provide an ID for existing users, or * invite unregistered users using an email or phone number. If initiated from * a Client SDK, Appwrite will send an email or sms with a link to join the * team to the invited user, and an account will be created for them if one * doesn't exist. If initiated from a Server SDK, the new member will be added * automatically to the team. * * You only need to provide one of a user ID, email, or phone number. Appwrite * will prioritize accepting the user ID > email > phone number if you provide * more than one of these parameters. * * Use the `url` parameter to redirect the user from the invitation email to * your app. After the user is redirected, use the [Update Team Membership * Status](https://appwrite.io/docs/references/cloud/client-web/teams#updateMembershipStatus) * endpoint to allow the user to accept the invitation to the team. * * Please note that to avoid a [Redirect * Attack](https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.md) * Appwrite will accept the only redirect URLs under the domains you have * added as a platform on the Appwrite Console. * * * @param {string} teamId * @param {string[]} roles * @param {string} email * @param {string} userId * @param {string} phone * @param {string} url * @param {string} name * @throws {AppwriteException} * @returns {Promise} */ async createMembership(teamId, roles, email, userId, phone, url, name) { const apiPath = '/teams/{teamId}/memberships'.replace('{teamId}', teamId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof roles === 'undefined') { throw new AppwriteException('Missing required parameter: "roles"'); } if (typeof email !== 'undefined') { payload['email'] = email; } if (typeof userId !== 'undefined') { payload['userId'] = userId; } if (typeof phone !== 'undefined') { payload['phone'] = phone; } if (typeof roles !== 'undefined') { payload['roles'] = roles; } if (typeof url !== 'undefined') { payload['url'] = url; } if (typeof name !== 'undefined') { payload['name'] = name; } return await this.client.call('post', apiPath, { 'content-type': 'application/json', }, payload); } /** * Get team membership * * Get a team member by the membership unique id. All team members have read * access for this resource. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} * @returns {Promise} */ async getMembership(teamId, membershipId) { const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof membershipId === 'undefined') { throw new AppwriteException('Missing required parameter: "membershipId"'); } return await this.client.call('get', apiPath, { 'content-type': 'application/json', }, payload); } /** * Update membership * * Modify the roles of a team member. Only team members with the owner role * have access to this endpoint. Learn more about [roles and * permissions](https://appwrite.io/docs/permissions). * * * @param {string} teamId * @param {string} membershipId * @param {string[]} roles * @throws {AppwriteException} * @returns {Promise} */ async updateMembership(teamId, membershipId, roles) { const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof membershipId === 'undefined') { throw new AppwriteException('Missing required parameter: "membershipId"'); } if (typeof roles === 'undefined') { throw new AppwriteException('Missing required parameter: "roles"'); } if (typeof roles !== 'undefined') { payload['roles'] = roles; } return await this.client.call('patch', apiPath, { 'content-type': 'application/json', }, payload); } /** * Delete team membership * * This endpoint allows a user to leave a team or for a team owner to delete * the membership of any other team member. You can also use this endpoint to * delete a user membership even if it is not accepted. * * @param {string} teamId * @param {string} membershipId * @throws {AppwriteException} * @returns {Promise} */ async deleteMembership(teamId, membershipId) { const apiPath = '/teams/{teamId}/memberships/{membershipId}'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof membershipId === 'undefined') { throw new AppwriteException('Missing required parameter: "membershipId"'); } return await this.client.call('delete', apiPath, { 'content-type': 'application/json', }, payload); } /** * Update team membership status * * Use this endpoint to allow a user to accept an invitation to join a team * after being redirected back to your app from the invitation email received * by the user. * * If the request is successful, a session for the user is automatically * created. * * * @param {string} teamId * @param {string} membershipId * @param {string} userId * @param {string} secret * @throws {AppwriteException} * @returns {Promise} */ async updateMembershipStatus(teamId, membershipId, userId, secret) { const apiPath = '/teams/{teamId}/memberships/{membershipId}/status'.replace('{teamId}', teamId).replace('{membershipId}', membershipId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof membershipId === 'undefined') { throw new AppwriteException('Missing required parameter: "membershipId"'); } if (typeof userId === 'undefined') { throw new AppwriteException('Missing required parameter: "userId"'); } if (typeof secret === 'undefined') { throw new AppwriteException('Missing required parameter: "secret"'); } if (typeof userId !== 'undefined') { payload['userId'] = userId; } if (typeof secret !== 'undefined') { payload['secret'] = secret; } return await this.client.call('patch', apiPath, { 'content-type': 'application/json', }, payload); } /** * Get team preferences * * Get the team's shared preferences by its unique ID. If a preference doesn't * need to be shared by all team members, prefer storing them in [user * preferences](https://appwrite.io/docs/references/cloud/client-web/account#getPrefs). * * @param {string} teamId * @throws {AppwriteException} * @returns {Promise} */ async getPrefs(teamId) { const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } return await this.client.call('get', apiPath, { 'content-type': 'application/json', }, payload); } /** * Update preferences * * Update the team's preferences by its unique ID. The object you pass is * stored as is and replaces any previous value. The maximum allowed prefs * size is 64kB and throws an error if exceeded. * * @param {string} teamId * @param {object} prefs * @throws {AppwriteException} * @returns {Promise} */ async updatePrefs(teamId, prefs) { const apiPath = '/teams/{teamId}/prefs'.replace('{teamId}', teamId); let payload = {}; if (typeof teamId === 'undefined') { throw new AppwriteException('Missing required parameter: "teamId"'); } if (typeof prefs === 'undefined') { throw new AppwriteException('Missing required parameter: "prefs"'); } if (typeof prefs !== 'undefined') { payload['prefs'] = prefs; } return await this.client.call('put', apiPath, { 'content-type': 'application/json', }, payload); } } module.exports = Teams;