UNPKG

box-node-sdk

Version:

Official SDK for Box Platform APIs

734 lines (725 loc) 26.1 kB
import { serializeClassification } from '../schemas/classification'; import { deserializeClassification } from '../schemas/classification'; import { serializeClientError } from '../schemas/clientError'; import { deserializeClientError } from '../schemas/clientError'; import { ResponseFormat } from '../networking/fetchOptions'; import { Classification } from '../schemas/classification'; import { ClientError } from '../schemas/clientError'; import { BoxSdkError } from '../box/errors'; import { Authentication } from '../networking/auth'; import { NetworkSession } from '../networking/network'; import { FetchOptions } from '../networking/fetchOptions'; import { FetchResponse } from '../networking/fetchResponse'; import { prepareParams } from '../internal/utils'; import { toString } from '../internal/utils'; import { ByteStream } from '../internal/utils'; import { CancellationToken } from '../internal/utils'; import { sdToJson } from '../serialization/json'; import { SerializedData } from '../serialization/json'; import { sdIsEmpty } from '../serialization/json'; import { sdIsBoolean } from '../serialization/json'; import { sdIsNumber } from '../serialization/json'; import { sdIsString } from '../serialization/json'; import { sdIsList } from '../serialization/json'; import { sdIsMap } from '../serialization/json'; export class GetClassificationOnFolderOptionals { readonly headers: GetClassificationOnFolderHeaders = new GetClassificationOnFolderHeaders({}); readonly cancellationToken?: CancellationToken = void 0; constructor( fields: Omit< GetClassificationOnFolderOptionals, 'headers' | 'cancellationToken' > & Partial< Pick< GetClassificationOnFolderOptionals, 'headers' | 'cancellationToken' > >, ) { if (fields.headers !== undefined) { this.headers = fields.headers; } if (fields.cancellationToken !== undefined) { this.cancellationToken = fields.cancellationToken; } } } export interface GetClassificationOnFolderOptionalsInput { readonly headers?: GetClassificationOnFolderHeaders; readonly cancellationToken?: CancellationToken; } export class AddClassificationToFolderOptionals { readonly requestBody: AddClassificationToFolderRequestBody = {} satisfies AddClassificationToFolderRequestBody; readonly headers: AddClassificationToFolderHeaders = new AddClassificationToFolderHeaders({}); readonly cancellationToken?: CancellationToken = void 0; constructor( fields: Omit< AddClassificationToFolderOptionals, 'requestBody' | 'headers' | 'cancellationToken' > & Partial< Pick< AddClassificationToFolderOptionals, 'requestBody' | 'headers' | 'cancellationToken' > >, ) { if (fields.requestBody !== undefined) { this.requestBody = fields.requestBody; } if (fields.headers !== undefined) { this.headers = fields.headers; } if (fields.cancellationToken !== undefined) { this.cancellationToken = fields.cancellationToken; } } } export interface AddClassificationToFolderOptionalsInput { readonly requestBody?: AddClassificationToFolderRequestBody; readonly headers?: AddClassificationToFolderHeaders; readonly cancellationToken?: CancellationToken; } export class UpdateClassificationOnFolderOptionals { readonly headers: UpdateClassificationOnFolderHeaders = new UpdateClassificationOnFolderHeaders({}); readonly cancellationToken?: CancellationToken = void 0; constructor( fields: Omit< UpdateClassificationOnFolderOptionals, 'headers' | 'cancellationToken' > & Partial< Pick< UpdateClassificationOnFolderOptionals, 'headers' | 'cancellationToken' > >, ) { if (fields.headers !== undefined) { this.headers = fields.headers; } if (fields.cancellationToken !== undefined) { this.cancellationToken = fields.cancellationToken; } } } export interface UpdateClassificationOnFolderOptionalsInput { readonly headers?: UpdateClassificationOnFolderHeaders; readonly cancellationToken?: CancellationToken; } export class DeleteClassificationFromFolderOptionals { readonly headers: DeleteClassificationFromFolderHeaders = new DeleteClassificationFromFolderHeaders({}); readonly cancellationToken?: CancellationToken = void 0; constructor( fields: Omit< DeleteClassificationFromFolderOptionals, 'headers' | 'cancellationToken' > & Partial< Pick< DeleteClassificationFromFolderOptionals, 'headers' | 'cancellationToken' > >, ) { if (fields.headers !== undefined) { this.headers = fields.headers; } if (fields.cancellationToken !== undefined) { this.cancellationToken = fields.cancellationToken; } } } export interface DeleteClassificationFromFolderOptionalsInput { readonly headers?: DeleteClassificationFromFolderHeaders; readonly cancellationToken?: CancellationToken; } export class GetClassificationOnFolderHeaders { /** * Extra headers that will be included in the HTTP request. */ readonly extraHeaders?: { readonly [key: string]: undefined | string; } = {}; constructor( fields: Omit<GetClassificationOnFolderHeaders, 'extraHeaders'> & Partial<Pick<GetClassificationOnFolderHeaders, 'extraHeaders'>>, ) { if (fields.extraHeaders !== undefined) { this.extraHeaders = fields.extraHeaders; } } } export interface GetClassificationOnFolderHeadersInput { /** * Extra headers that will be included in the HTTP request. */ readonly extraHeaders?: { readonly [key: string]: undefined | string; }; } export interface AddClassificationToFolderRequestBody { /** * The name of the classification to apply to this folder. * * To list the available classifications in an enterprise, * use the classification API to retrieve the * [classification template](https://developer.box.com/reference/get-metadata-templates-enterprise-securityClassification-6VMVochwUWo-schema) * which lists all available classification keys. */ readonly boxSecurityClassificationKey?: string; readonly rawData?: SerializedData; } export class AddClassificationToFolderHeaders { /** * Extra headers that will be included in the HTTP request. */ readonly extraHeaders?: { readonly [key: string]: undefined | string; } = {}; constructor( fields: Omit<AddClassificationToFolderHeaders, 'extraHeaders'> & Partial<Pick<AddClassificationToFolderHeaders, 'extraHeaders'>>, ) { if (fields.extraHeaders !== undefined) { this.extraHeaders = fields.extraHeaders; } } } export interface AddClassificationToFolderHeadersInput { /** * Extra headers that will be included in the HTTP request. */ readonly extraHeaders?: { readonly [key: string]: undefined | string; }; } export type UpdateClassificationOnFolderRequestBodyOpField = 'replace' | string; export type UpdateClassificationOnFolderRequestBodyPathField = | '/Box__Security__Classification__Key' | string; export class UpdateClassificationOnFolderRequestBody { /** * The value will always be `replace`. */ readonly op: UpdateClassificationOnFolderRequestBodyOpField = 'replace' as UpdateClassificationOnFolderRequestBodyOpField; /** * Defines classifications * available in the enterprise. */ readonly path: UpdateClassificationOnFolderRequestBodyPathField = '/Box__Security__Classification__Key' as UpdateClassificationOnFolderRequestBodyPathField; /** * The name of the classification to apply to this folder. * * To list the available classifications in an enterprise, * use the classification API to retrieve the * [classification template](https://developer.box.com/reference/get-metadata-templates-enterprise-securityClassification-6VMVochwUWo-schema) * which lists all available classification keys. */ readonly value!: string; readonly rawData?: SerializedData; constructor( fields: Omit<UpdateClassificationOnFolderRequestBody, 'op' | 'path'> & Partial<Pick<UpdateClassificationOnFolderRequestBody, 'op' | 'path'>>, ) { if (fields.op !== undefined) { this.op = fields.op; } if (fields.path !== undefined) { this.path = fields.path; } if (fields.value !== undefined) { this.value = fields.value; } if (fields.rawData !== undefined) { this.rawData = fields.rawData; } } } export interface UpdateClassificationOnFolderRequestBodyInput { /** * The value will always be `replace`. */ readonly op?: UpdateClassificationOnFolderRequestBodyOpField; /** * Defines classifications * available in the enterprise. */ readonly path?: UpdateClassificationOnFolderRequestBodyPathField; /** * The name of the classification to apply to this folder. * * To list the available classifications in an enterprise, * use the classification API to retrieve the * [classification template](https://developer.box.com/reference/get-metadata-templates-enterprise-securityClassification-6VMVochwUWo-schema) * which lists all available classification keys. */ readonly value: string; readonly rawData?: SerializedData; } export class UpdateClassificationOnFolderHeaders { /** * Extra headers that will be included in the HTTP request. */ readonly extraHeaders?: { readonly [key: string]: undefined | string; } = {}; constructor( fields: Omit<UpdateClassificationOnFolderHeaders, 'extraHeaders'> & Partial<Pick<UpdateClassificationOnFolderHeaders, 'extraHeaders'>>, ) { if (fields.extraHeaders !== undefined) { this.extraHeaders = fields.extraHeaders; } } } export interface UpdateClassificationOnFolderHeadersInput { /** * Extra headers that will be included in the HTTP request. */ readonly extraHeaders?: { readonly [key: string]: undefined | string; }; } export class DeleteClassificationFromFolderHeaders { /** * Extra headers that will be included in the HTTP request. */ readonly extraHeaders?: { readonly [key: string]: undefined | string; } = {}; constructor( fields: Omit<DeleteClassificationFromFolderHeaders, 'extraHeaders'> & Partial<Pick<DeleteClassificationFromFolderHeaders, 'extraHeaders'>>, ) { if (fields.extraHeaders !== undefined) { this.extraHeaders = fields.extraHeaders; } } } export interface DeleteClassificationFromFolderHeadersInput { /** * Extra headers that will be included in the HTTP request. */ readonly extraHeaders?: { readonly [key: string]: undefined | string; }; } export class FolderClassificationsManager { readonly auth?: Authentication; readonly networkSession: NetworkSession = new NetworkSession({}); constructor( fields: Omit< FolderClassificationsManager, | 'networkSession' | 'getClassificationOnFolder' | 'addClassificationToFolder' | 'updateClassificationOnFolder' | 'deleteClassificationFromFolder' > & Partial<Pick<FolderClassificationsManager, 'networkSession'>>, ) { if (fields.auth !== undefined) { this.auth = fields.auth; } if (fields.networkSession !== undefined) { this.networkSession = fields.networkSession; } } /** * Retrieves the classification metadata instance that * has been applied to a folder. * * This API can also be called by including the enterprise ID in the * URL explicitly, for example * `/folders/:id/enterprise_12345/securityClassification-6VMVochwUWo`. * @param {string} folderId The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345" * @param {GetClassificationOnFolderOptionalsInput} optionalsInput * @returns {Promise<Classification>} */ async getClassificationOnFolder( folderId: string, optionalsInput: GetClassificationOnFolderOptionalsInput = {}, ): Promise<Classification> { const optionals: GetClassificationOnFolderOptionals = new GetClassificationOnFolderOptionals({ headers: optionalsInput.headers, cancellationToken: optionalsInput.cancellationToken, }); const headers: any = optionals.headers; const cancellationToken: any = optionals.cancellationToken; const headersMap: { readonly [key: string]: string; } = prepareParams({ ...{}, ...headers.extraHeaders }); const response: FetchResponse = await this.networkSession.networkClient.fetch( new FetchOptions({ url: ''.concat( this.networkSession.baseUrls.baseUrl, '/2.0/folders/', (toString(folderId) as string)!, '/metadata/enterprise/securityClassification-6VMVochwUWo', ) as string, method: 'GET', headers: headersMap, responseFormat: 'json' as ResponseFormat, auth: this.auth, networkSession: this.networkSession, cancellationToken: cancellationToken, }), ); return { ...deserializeClassification(response.data!), rawData: response.data!, }; } /** * Adds a classification to a folder by specifying the label of the * classification to add. * * This API can also be called by including the enterprise ID in the * URL explicitly, for example * `/folders/:id/enterprise_12345/securityClassification-6VMVochwUWo`. * @param {string} folderId The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345" * @param {AddClassificationToFolderOptionalsInput} optionalsInput * @returns {Promise<Classification>} */ async addClassificationToFolder( folderId: string, optionalsInput: AddClassificationToFolderOptionalsInput = {}, ): Promise<Classification> { const optionals: AddClassificationToFolderOptionals = new AddClassificationToFolderOptionals({ requestBody: optionalsInput.requestBody, headers: optionalsInput.headers, cancellationToken: optionalsInput.cancellationToken, }); const requestBody: any = optionals.requestBody; const headers: any = optionals.headers; const cancellationToken: any = optionals.cancellationToken; const headersMap: { readonly [key: string]: string; } = prepareParams({ ...{}, ...headers.extraHeaders }); const response: FetchResponse = await this.networkSession.networkClient.fetch( new FetchOptions({ url: ''.concat( this.networkSession.baseUrls.baseUrl, '/2.0/folders/', (toString(folderId) as string)!, '/metadata/enterprise/securityClassification-6VMVochwUWo', ) as string, method: 'POST', headers: headersMap, data: serializeAddClassificationToFolderRequestBody(requestBody), contentType: 'application/json', responseFormat: 'json' as ResponseFormat, auth: this.auth, networkSession: this.networkSession, cancellationToken: cancellationToken, }), ); return { ...deserializeClassification(response.data!), rawData: response.data!, }; } /** * Updates a classification on a folder. * * The classification can only be updated if a classification has already been * applied to the folder before. When editing classifications, only values are * defined for the enterprise will be accepted. * @param {string} folderId The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345" * @param {readonly UpdateClassificationOnFolderRequestBody[]} requestBody Request body of updateClassificationOnFolder method * @param {UpdateClassificationOnFolderOptionalsInput} optionalsInput * @returns {Promise<Classification>} */ async updateClassificationOnFolder( folderId: string, requestBody: readonly UpdateClassificationOnFolderRequestBody[], optionalsInput: UpdateClassificationOnFolderOptionalsInput = {}, ): Promise<Classification> { const optionals: UpdateClassificationOnFolderOptionals = new UpdateClassificationOnFolderOptionals({ headers: optionalsInput.headers, cancellationToken: optionalsInput.cancellationToken, }); const headers: any = optionals.headers; const cancellationToken: any = optionals.cancellationToken; const headersMap: { readonly [key: string]: string; } = prepareParams({ ...{}, ...headers.extraHeaders }); const response: FetchResponse = await this.networkSession.networkClient.fetch( new FetchOptions({ url: ''.concat( this.networkSession.baseUrls.baseUrl, '/2.0/folders/', (toString(folderId) as string)!, '/metadata/enterprise/securityClassification-6VMVochwUWo', ) as string, method: 'PUT', headers: headersMap, data: requestBody.map( serializeUpdateClassificationOnFolderRequestBody, ) as readonly any[], contentType: 'application/json-patch+json', responseFormat: 'json' as ResponseFormat, auth: this.auth, networkSession: this.networkSession, cancellationToken: cancellationToken, }), ); return { ...deserializeClassification(response.data!), rawData: response.data!, }; } /** * Removes any classifications from a folder. * * This API can also be called by including the enterprise ID in the * URL explicitly, for example * `/folders/:id/enterprise_12345/securityClassification-6VMVochwUWo`. * @param {string} folderId The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345" * @param {DeleteClassificationFromFolderOptionalsInput} optionalsInput * @returns {Promise<undefined>} */ async deleteClassificationFromFolder( folderId: string, optionalsInput: DeleteClassificationFromFolderOptionalsInput = {}, ): Promise<undefined> { const optionals: DeleteClassificationFromFolderOptionals = new DeleteClassificationFromFolderOptionals({ headers: optionalsInput.headers, cancellationToken: optionalsInput.cancellationToken, }); const headers: any = optionals.headers; const cancellationToken: any = optionals.cancellationToken; const headersMap: { readonly [key: string]: string; } = prepareParams({ ...{}, ...headers.extraHeaders }); const response: FetchResponse = await this.networkSession.networkClient.fetch( new FetchOptions({ url: ''.concat( this.networkSession.baseUrls.baseUrl, '/2.0/folders/', (toString(folderId) as string)!, '/metadata/enterprise/securityClassification-6VMVochwUWo', ) as string, method: 'DELETE', headers: headersMap, responseFormat: 'no_content' as ResponseFormat, auth: this.auth, networkSession: this.networkSession, cancellationToken: cancellationToken, }), ); return void 0; } } export interface FolderClassificationsManagerInput { readonly auth?: Authentication; readonly networkSession?: NetworkSession; } export function serializeAddClassificationToFolderRequestBody( val: AddClassificationToFolderRequestBody, ): SerializedData { return { ['Box__Security__Classification__Key']: val.boxSecurityClassificationKey, }; } export function deserializeAddClassificationToFolderRequestBody( val: SerializedData, ): AddClassificationToFolderRequestBody { if (!sdIsMap(val)) { throw new BoxSdkError({ message: 'Expecting a map for "AddClassificationToFolderRequestBody"', }); } if ( !(val.Box__Security__Classification__Key == void 0) && !sdIsString(val.Box__Security__Classification__Key) ) { throw new BoxSdkError({ message: 'Expecting string for "Box__Security__Classification__Key" of type "AddClassificationToFolderRequestBody"', }); } const boxSecurityClassificationKey: undefined | string = val.Box__Security__Classification__Key == void 0 ? void 0 : val.Box__Security__Classification__Key; return { boxSecurityClassificationKey: boxSecurityClassificationKey, } satisfies AddClassificationToFolderRequestBody; } export function serializeUpdateClassificationOnFolderRequestBodyOpField( val: UpdateClassificationOnFolderRequestBodyOpField, ): SerializedData { return val; } export function deserializeUpdateClassificationOnFolderRequestBodyOpField( val: SerializedData, ): UpdateClassificationOnFolderRequestBodyOpField { if (val == 'replace') { return val; } if (sdIsString(val)) { return val; } throw new BoxSdkError({ message: "Can't deserialize UpdateClassificationOnFolderRequestBodyOpField", }); } export function serializeUpdateClassificationOnFolderRequestBodyPathField( val: UpdateClassificationOnFolderRequestBodyPathField, ): SerializedData { return val; } export function deserializeUpdateClassificationOnFolderRequestBodyPathField( val: SerializedData, ): UpdateClassificationOnFolderRequestBodyPathField { if (val == '/Box__Security__Classification__Key') { return val; } if (sdIsString(val)) { return val; } throw new BoxSdkError({ message: "Can't deserialize UpdateClassificationOnFolderRequestBodyPathField", }); } export function serializeUpdateClassificationOnFolderRequestBody( val: UpdateClassificationOnFolderRequestBody, ): SerializedData { return { ['op']: serializeUpdateClassificationOnFolderRequestBodyOpField(val.op), ['path']: serializeUpdateClassificationOnFolderRequestBodyPathField( val.path, ), ['value']: val.value, }; } export function deserializeUpdateClassificationOnFolderRequestBody( val: SerializedData, ): UpdateClassificationOnFolderRequestBody { if (!sdIsMap(val)) { throw new BoxSdkError({ message: 'Expecting a map for "UpdateClassificationOnFolderRequestBody"', }); } if (val.op == void 0) { throw new BoxSdkError({ message: 'Expecting "op" of type "UpdateClassificationOnFolderRequestBody" to be defined', }); } const op: UpdateClassificationOnFolderRequestBodyOpField = deserializeUpdateClassificationOnFolderRequestBodyOpField(val.op); if (val.path == void 0) { throw new BoxSdkError({ message: 'Expecting "path" of type "UpdateClassificationOnFolderRequestBody" to be defined', }); } const path: UpdateClassificationOnFolderRequestBodyPathField = deserializeUpdateClassificationOnFolderRequestBodyPathField(val.path); if (val.value == void 0) { throw new BoxSdkError({ message: 'Expecting "value" of type "UpdateClassificationOnFolderRequestBody" to be defined', }); } if (!sdIsString(val.value)) { throw new BoxSdkError({ message: 'Expecting string for "value" of type "UpdateClassificationOnFolderRequestBody"', }); } const value: string = val.value; return { op: op, path: path, value: value, } satisfies UpdateClassificationOnFolderRequestBody; } export function serializeUpdateClassificationOnFolderRequestBodyInput( val: UpdateClassificationOnFolderRequestBodyInput, ): SerializedData { return { ['op']: val.op == void 0 ? val.op : serializeUpdateClassificationOnFolderRequestBodyOpField(val.op), ['path']: val.path == void 0 ? val.path : serializeUpdateClassificationOnFolderRequestBodyPathField(val.path), ['value']: val.value, }; } export function deserializeUpdateClassificationOnFolderRequestBodyInput( val: SerializedData, ): UpdateClassificationOnFolderRequestBodyInput { if (!sdIsMap(val)) { throw new BoxSdkError({ message: 'Expecting a map for "UpdateClassificationOnFolderRequestBodyInput"', }); } const op: undefined | UpdateClassificationOnFolderRequestBodyOpField = val.op == void 0 ? void 0 : deserializeUpdateClassificationOnFolderRequestBodyOpField(val.op); const path: undefined | UpdateClassificationOnFolderRequestBodyPathField = val.path == void 0 ? void 0 : deserializeUpdateClassificationOnFolderRequestBodyPathField(val.path); if (val.value == void 0) { throw new BoxSdkError({ message: 'Expecting "value" of type "UpdateClassificationOnFolderRequestBodyInput" to be defined', }); } if (!sdIsString(val.value)) { throw new BoxSdkError({ message: 'Expecting string for "value" of type "UpdateClassificationOnFolderRequestBodyInput"', }); } const value: string = val.value; return { op: op, path: path, value: value, } satisfies UpdateClassificationOnFolderRequestBodyInput; }