Source: managers/integration-mappings.ts

import BoxClient from '../box-client';
import urlPath from '../util/url-path';
import * as schemas from '../schemas';
/**
 */
class IntegrationMappingsManager {
	client: BoxClient;
	/**
	 * @param {BoxClient} client The Box API Client that is responsible for making calls to the API
	 */
	constructor(client: BoxClient) {
		this.client = client;
	}
	/**
	 * List Slack integration mappings
	 *
	 * Lists [Slack integration mappings](https://support.box.com/hc/en-us/articles/4415585987859-Box-as-the-Content-Layer-for-Slack) in a users' enterprise.
	 *
	 * You need Admin or Co-Admin role to
	 * use this endpoint.
	 * @param {object} [options] Options for the request
	 * @param {string} [options.marker] Defines the position marker at which to begin returning results. This is used when paginating using marker-based pagination. This requires `usemarker` to be set to `true`.
	 * @param {number} [options.limit] The maximum number of items to return per page.
	 * @param {"channel"} [options.partner_item_type] Mapped item type, for which the mapping should be returned
	 * @param {string} [options.partner_item_id] ID of the mapped item, for which the mapping should be returned
	 * @param {string} [options.box_item_id] Box item ID, for which the mappings should be returned
	 * @param {"folder"} [options.box_item_type] Box item type, for which the mappings should be returned
	 * @param {boolean} [options.is_manually_created] Whether the mapping has been manually created
	 * @param {Function} [callback] Passed the result if successful, error otherwise
	 * @returns {Promise<schemas.IntegrationMappings>} A promise resolving to the result or rejecting with an error
	 */
	getSlackIntegrationMappings(
		options?: {
			/**
			 * Defines the position marker at which to begin returning results. This is
			 * used when paginating using marker-based pagination.
			 *
			 * This requires `usemarker` to be set to `true`.
			 */
			readonly marker?: string;
			/**
			 * The maximum number of items to return per page.
			 */
			readonly limit?: number;
			/**
			 * Mapped item type, for which the mapping should be returned
			 */
			readonly partner_item_type?: 'channel';
			/**
			 * ID of the mapped item, for which the mapping should be returned
			 */
			readonly partner_item_id?: string;
			/**
			 * Box item ID, for which the mappings should be returned
			 */
			readonly box_item_id?: string;
			/**
			 * Box item type, for which the mappings should be returned
			 */
			readonly box_item_type?: 'folder';
			/**
			 * Whether the mapping has been manually created
			 */
			readonly is_manually_created?: boolean;
		},
		callback?: Function
	): Promise<schemas.IntegrationMappings> {
		const { ...queryParams } = options,
			apiPath = urlPath('integration_mappings', 'slack'),
			params = {
				qs: queryParams,
			};
		return this.client.wrapWithDefaultHandler(this.client.get)(
			apiPath,
			params,
			callback
		);
	}
	/**
	 * Create Slack integration mapping
	 *
	 * Creates a [Slack integration mapping](https://support.box.com/hc/en-us/articles/4415585987859-Box-as-the-Content-Layer-for-Slack)
	 * by mapping a Slack channel to a Box item.
	 *
	 * You need Admin or Co-Admin role to
	 * use this endpoint.
	 * @param {schemas.IntegrationMappingSlackCreateRequest} body
	 * @param {object} [options] Options for the request
	 * @param {Function} [callback] Passed the result if successful, error otherwise
	 * @returns {Promise<schemas.IntegrationMapping>} A promise resolving to the result or rejecting with an error
	 */
	createSlackIntegrationMapping(
		body: schemas.IntegrationMappingSlackCreateRequest,
		options?: {},
		callback?: Function
	): Promise<schemas.IntegrationMapping> {
		const { ...queryParams } = options,
			apiPath = urlPath('integration_mappings', 'slack'),
			params = {
				qs: queryParams,
				body: body,
			};
		return this.client.wrapWithDefaultHandler(this.client.post)(
			apiPath,
			params,
			callback
		);
	}
	/**
	 * Update Slack integration mapping
	 *
	 * Updates a [Slack integration mapping](https://support.box.com/hc/en-us/articles/4415585987859-Box-as-the-Content-Layer-for-Slack).
	 * Supports updating the Box folder ID and options.
	 *
	 * You need Admin or Co-Admin role to
	 * use this endpoint.
	 * @param {object} body
	 * @param {object} options Options for the request
	 * @param {string} options.integration_mapping_id An ID of an integration mapping
	 * @param {Function} [callback] Passed the result if successful, error otherwise
	 * @returns {Promise<schemas.IntegrationMapping>} A promise resolving to the result or rejecting with an error
	 */
	updateSlackIntegrationMapping(
		body: object,
		options: {
			/**
			 * An ID of an integration mapping
			 */
			readonly integration_mapping_id: string;
		},
		callback?: Function
	): Promise<schemas.IntegrationMapping> {
		const { integration_mapping_id: integrationMappingId, ...queryParams } =
				options,
			apiPath = urlPath('integration_mappings', 'slack', integrationMappingId),
			params = {
				qs: queryParams,
				body: body,
			};
		return this.client.wrapWithDefaultHandler(this.client.put)(
			apiPath,
			params,
			callback
		);
	}
	/**
	 * Delete Slack integration mapping
	 *
	 * Deletes a [Slack integration mapping](https://support.box.com/hc/en-us/articles/4415585987859-Box-as-the-Content-Layer-for-Slack).
	 *
	 *
	 * You need Admin or Co-Admin role to
	 * use this endpoint.
	 * @param {object} options Options for the request
	 * @param {string} options.integration_mapping_id An ID of an integration mapping
	 * @param {Function} [callback] Passed the result if successful, error otherwise
	 * @returns {Promise<void>} A promise resolving to the result or rejecting with an error
	 */
	deleteSlackIntegrationMappingById(
		options: {
			/**
			 * An ID of an integration mapping
			 */
			readonly integration_mapping_id: string;
		},
		callback?: Function
	): Promise<void> {
		const { integration_mapping_id: integrationMappingId, ...queryParams } =
				options,
			apiPath = urlPath('integration_mappings', 'slack', integrationMappingId),
			params = {
				qs: queryParams,
			};
		return this.client.wrapWithDefaultHandler(this.client.del)(
			apiPath,
			params,
			callback
		);
	}
}
export = IntegrationMappingsManager;