• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

box / box-node-sdk / 20321921002

17 Dec 2025 04:59PM UTC coverage: 40.758% (+0.1%) from 40.657%
20321921002

push

github

web-flow
fix: add taxonomy to Metadata Field (read) definition (box/box-openapi#572) (#1275)

4652 of 20096 branches covered (23.15%)

Branch coverage included in aggregate %.

0 of 2 new or added lines in 1 file covered. (0.0%)

542 existing lines in 11 files now uncovered.

17257 of 33658 relevant lines covered (51.27%)

146.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

48.63
/src/managers/folderMetadata.ts
1
import { serializeMetadatas } from '../schemas/metadatas';
2
import { deserializeMetadatas } from '../schemas/metadatas';
240✔
3
import { serializeClientError } from '../schemas/clientError';
4
import { deserializeClientError } from '../schemas/clientError';
5
import { serializeMetadataFull } from '../schemas/metadataFull';
6
import { deserializeMetadataFull } from '../schemas/metadataFull';
240✔
7
import { serializeMetadataError } from '../schemas/metadataError';
8
import { deserializeMetadataError } from '../schemas/metadataError';
9
import { serializeMetadataInstanceValue } from '../schemas/metadataInstanceValue';
240✔
10
import { deserializeMetadataInstanceValue } from '../schemas/metadataInstanceValue';
240✔
11
import { ResponseFormat } from '../networking/fetchOptions';
12
import { Metadatas } from '../schemas/metadatas';
13
import { ClientError } from '../schemas/clientError';
14
import { MetadataFull } from '../schemas/metadataFull';
15
import { MetadataError } from '../schemas/metadataError';
16
import { MetadataInstanceValue } from '../schemas/metadataInstanceValue';
17
import { BoxSdkError } from '../box/errors';
240✔
18
import { Authentication } from '../networking/auth';
19
import { NetworkSession } from '../networking/network';
240✔
20
import { FetchOptions } from '../networking/fetchOptions';
240✔
21
import { FetchResponse } from '../networking/fetchResponse';
22
import { prepareParams } from '../internal/utils';
240✔
23
import { toString } from '../internal/utils';
240✔
24
import { ByteStream } from '../internal/utils';
25
import { CancellationToken } from '../internal/utils';
26
import { sdToJson } from '../serialization/json';
27
import { SerializedData } from '../serialization/json';
28
import { sdIsEmpty } from '../serialization/json';
29
import { sdIsBoolean } from '../serialization/json';
30
import { sdIsNumber } from '../serialization/json';
31
import { sdIsString } from '../serialization/json';
240✔
32
import { sdIsList } from '../serialization/json';
33
import { sdIsMap } from '../serialization/json';
240✔
34
export class GetFolderMetadataOptionals {
240✔
35
  readonly queryParams: GetFolderMetadataQueryParams =
3✔
36
    {} satisfies GetFolderMetadataQueryParams;
37
  readonly headers: GetFolderMetadataHeaders = new GetFolderMetadataHeaders({});
3✔
38
  readonly cancellationToken?: CancellationToken = void 0;
3✔
39
  constructor(
40
    fields: Omit<
41
      GetFolderMetadataOptionals,
42
      'queryParams' | 'headers' | 'cancellationToken'
43
    > &
44
      Partial<
45
        Pick<
46
          GetFolderMetadataOptionals,
47
          'queryParams' | 'headers' | 'cancellationToken'
48
        >
49
      >,
50
  ) {
51
    if (fields.queryParams !== undefined) {
3!
UNCOV
52
      this.queryParams = fields.queryParams;
×
53
    }
54
    if (fields.headers !== undefined) {
3!
UNCOV
55
      this.headers = fields.headers;
×
56
    }
57
    if (fields.cancellationToken !== undefined) {
3!
UNCOV
58
      this.cancellationToken = fields.cancellationToken;
×
59
    }
60
  }
61
}
62
export interface GetFolderMetadataOptionalsInput {
63
  readonly queryParams?: GetFolderMetadataQueryParams;
64
  readonly headers?: GetFolderMetadataHeaders;
65
  readonly cancellationToken?: CancellationToken;
66
}
67
export class GetFolderMetadataByIdOptionals {
240✔
68
  readonly headers: GetFolderMetadataByIdHeaders =
9✔
69
    new GetFolderMetadataByIdHeaders({});
70
  readonly cancellationToken?: CancellationToken = void 0;
9✔
71
  constructor(
72
    fields: Omit<
73
      GetFolderMetadataByIdOptionals,
74
      'headers' | 'cancellationToken'
75
    > &
76
      Partial<
77
        Pick<GetFolderMetadataByIdOptionals, 'headers' | 'cancellationToken'>
78
      >,
79
  ) {
80
    if (fields.headers !== undefined) {
9!
UNCOV
81
      this.headers = fields.headers;
×
82
    }
83
    if (fields.cancellationToken !== undefined) {
9!
UNCOV
84
      this.cancellationToken = fields.cancellationToken;
×
85
    }
86
  }
87
}
88
export interface GetFolderMetadataByIdOptionalsInput {
89
  readonly headers?: GetFolderMetadataByIdHeaders;
90
  readonly cancellationToken?: CancellationToken;
91
}
92
export class CreateFolderMetadataByIdOptionals {
240✔
93
  readonly headers: CreateFolderMetadataByIdHeaders =
12✔
94
    new CreateFolderMetadataByIdHeaders({});
95
  readonly cancellationToken?: CancellationToken = void 0;
12✔
96
  constructor(
97
    fields: Omit<
98
      CreateFolderMetadataByIdOptionals,
99
      'headers' | 'cancellationToken'
100
    > &
101
      Partial<
102
        Pick<CreateFolderMetadataByIdOptionals, 'headers' | 'cancellationToken'>
103
      >,
104
  ) {
105
    if (fields.headers !== undefined) {
12!
UNCOV
106
      this.headers = fields.headers;
×
107
    }
108
    if (fields.cancellationToken !== undefined) {
12!
UNCOV
109
      this.cancellationToken = fields.cancellationToken;
×
110
    }
111
  }
112
}
113
export interface CreateFolderMetadataByIdOptionalsInput {
114
  readonly headers?: CreateFolderMetadataByIdHeaders;
115
  readonly cancellationToken?: CancellationToken;
116
}
117
export class UpdateFolderMetadataByIdOptionals {
240✔
118
  readonly headers: UpdateFolderMetadataByIdHeaders =
6✔
119
    new UpdateFolderMetadataByIdHeaders({});
120
  readonly cancellationToken?: CancellationToken = void 0;
6✔
121
  constructor(
122
    fields: Omit<
123
      UpdateFolderMetadataByIdOptionals,
124
      'headers' | 'cancellationToken'
125
    > &
126
      Partial<
127
        Pick<UpdateFolderMetadataByIdOptionals, 'headers' | 'cancellationToken'>
128
      >,
129
  ) {
130
    if (fields.headers !== undefined) {
6!
UNCOV
131
      this.headers = fields.headers;
×
132
    }
133
    if (fields.cancellationToken !== undefined) {
6!
UNCOV
134
      this.cancellationToken = fields.cancellationToken;
×
135
    }
136
  }
137
}
138
export interface UpdateFolderMetadataByIdOptionalsInput {
139
  readonly headers?: UpdateFolderMetadataByIdHeaders;
140
  readonly cancellationToken?: CancellationToken;
141
}
142
export class DeleteFolderMetadataByIdOptionals {
240✔
143
  readonly headers: DeleteFolderMetadataByIdHeaders =
9✔
144
    new DeleteFolderMetadataByIdHeaders({});
145
  readonly cancellationToken?: CancellationToken = void 0;
9✔
146
  constructor(
147
    fields: Omit<
148
      DeleteFolderMetadataByIdOptionals,
149
      'headers' | 'cancellationToken'
150
    > &
151
      Partial<
152
        Pick<DeleteFolderMetadataByIdOptionals, 'headers' | 'cancellationToken'>
153
      >,
154
  ) {
155
    if (fields.headers !== undefined) {
9!
UNCOV
156
      this.headers = fields.headers;
×
157
    }
158
    if (fields.cancellationToken !== undefined) {
9!
UNCOV
159
      this.cancellationToken = fields.cancellationToken;
×
160
    }
161
  }
162
}
163
export interface DeleteFolderMetadataByIdOptionalsInput {
164
  readonly headers?: DeleteFolderMetadataByIdHeaders;
165
  readonly cancellationToken?: CancellationToken;
166
}
167
export interface GetFolderMetadataQueryParams {
168
  /**
169
   * Taxonomy field values are returned in `API view` by default, meaning
170
   * the value is represented with a taxonomy node identifier.
171
   * To retrieve the `Hydrated view`, where taxonomy values are represented
172
   * with the full taxonomy node information, set this parameter to `hydrated`.
173
   * This is the only supported value for this parameter. */
174
  readonly view?: string;
175
}
176
export class GetFolderMetadataHeaders {
240✔
177
  /**
178
   * Extra headers that will be included in the HTTP request. */
179
  readonly extraHeaders?: {
3✔
180
    readonly [key: string]: undefined | string;
181
  } = {};
182
  constructor(
183
    fields: Omit<GetFolderMetadataHeaders, 'extraHeaders'> &
184
      Partial<Pick<GetFolderMetadataHeaders, 'extraHeaders'>>,
185
  ) {
186
    if (fields.extraHeaders !== undefined) {
3!
UNCOV
187
      this.extraHeaders = fields.extraHeaders;
×
188
    }
189
  }
190
}
191
export interface GetFolderMetadataHeadersInput {
192
  /**
193
   * Extra headers that will be included in the HTTP request. */
194
  readonly extraHeaders?: {
195
    readonly [key: string]: undefined | string;
196
  };
197
}
198
export type GetFolderMetadataByIdScope = 'global' | 'enterprise' | string;
199
export class GetFolderMetadataByIdHeaders {
240✔
200
  /**
201
   * Extra headers that will be included in the HTTP request. */
202
  readonly extraHeaders?: {
9✔
203
    readonly [key: string]: undefined | string;
204
  } = {};
205
  constructor(
206
    fields: Omit<GetFolderMetadataByIdHeaders, 'extraHeaders'> &
207
      Partial<Pick<GetFolderMetadataByIdHeaders, 'extraHeaders'>>,
208
  ) {
209
    if (fields.extraHeaders !== undefined) {
9!
UNCOV
210
      this.extraHeaders = fields.extraHeaders;
×
211
    }
212
  }
213
}
214
export interface GetFolderMetadataByIdHeadersInput {
215
  /**
216
   * Extra headers that will be included in the HTTP request. */
217
  readonly extraHeaders?: {
218
    readonly [key: string]: undefined | string;
219
  };
220
}
221
export type CreateFolderMetadataByIdScope = 'global' | 'enterprise' | string;
222
export type CreateFolderMetadataByIdRequestBody = {
223
  readonly [key: string]: any;
224
};
225
export class CreateFolderMetadataByIdHeaders {
240✔
226
  /**
227
   * Extra headers that will be included in the HTTP request. */
228
  readonly extraHeaders?: {
12✔
229
    readonly [key: string]: undefined | string;
230
  } = {};
231
  constructor(
232
    fields: Omit<CreateFolderMetadataByIdHeaders, 'extraHeaders'> &
233
      Partial<Pick<CreateFolderMetadataByIdHeaders, 'extraHeaders'>>,
234
  ) {
235
    if (fields.extraHeaders !== undefined) {
12!
UNCOV
236
      this.extraHeaders = fields.extraHeaders;
×
237
    }
238
  }
239
}
240
export interface CreateFolderMetadataByIdHeadersInput {
241
  /**
242
   * Extra headers that will be included in the HTTP request. */
243
  readonly extraHeaders?: {
244
    readonly [key: string]: undefined | string;
245
  };
246
}
247
export type UpdateFolderMetadataByIdScope = 'global' | 'enterprise' | string;
248
export type UpdateFolderMetadataByIdRequestBodyOpField =
249
  | 'add'
250
  | 'replace'
251
  | 'remove'
252
  | 'test'
253
  | 'move'
254
  | 'copy'
255
  | string;
256
export interface UpdateFolderMetadataByIdRequestBody {
257
  /**
258
   * The type of change to perform on the template. Some
259
   * of these are hazardous as they will change existing templates. */
260
  readonly op?: UpdateFolderMetadataByIdRequestBodyOpField;
261
  /**
262
   * The location in the metadata JSON object
263
   * to apply the changes to, in the format of a
264
   * [JSON-Pointer](https://tools.ietf.org/html/rfc6901).
265
   *
266
   * The path must always be prefixed with a `/` to represent the root
267
   * of the template. The characters `~` and `/` are reserved
268
   * characters and must be escaped in the key. */
269
  readonly path?: string;
270
  readonly value?: MetadataInstanceValue;
271
  /**
272
   * The location in the metadata JSON object to move or copy a value
273
   * from. Required for `move` or `copy` operations and must be in the
274
   * format of a [JSON-Pointer](https://tools.ietf.org/html/rfc6901). */
275
  readonly from?: string;
276
  readonly rawData?: SerializedData;
277
}
278
export class UpdateFolderMetadataByIdHeaders {
240✔
279
  /**
280
   * Extra headers that will be included in the HTTP request. */
281
  readonly extraHeaders?: {
6✔
282
    readonly [key: string]: undefined | string;
283
  } = {};
284
  constructor(
285
    fields: Omit<UpdateFolderMetadataByIdHeaders, 'extraHeaders'> &
286
      Partial<Pick<UpdateFolderMetadataByIdHeaders, 'extraHeaders'>>,
287
  ) {
288
    if (fields.extraHeaders !== undefined) {
6!
UNCOV
289
      this.extraHeaders = fields.extraHeaders;
×
290
    }
291
  }
292
}
293
export interface UpdateFolderMetadataByIdHeadersInput {
294
  /**
295
   * Extra headers that will be included in the HTTP request. */
296
  readonly extraHeaders?: {
297
    readonly [key: string]: undefined | string;
298
  };
299
}
300
export type DeleteFolderMetadataByIdScope = 'global' | 'enterprise' | string;
301
export class DeleteFolderMetadataByIdHeaders {
240✔
302
  /**
303
   * Extra headers that will be included in the HTTP request. */
304
  readonly extraHeaders?: {
9✔
305
    readonly [key: string]: undefined | string;
306
  } = {};
307
  constructor(
308
    fields: Omit<DeleteFolderMetadataByIdHeaders, 'extraHeaders'> &
309
      Partial<Pick<DeleteFolderMetadataByIdHeaders, 'extraHeaders'>>,
310
  ) {
311
    if (fields.extraHeaders !== undefined) {
9!
UNCOV
312
      this.extraHeaders = fields.extraHeaders;
×
313
    }
314
  }
315
}
316
export interface DeleteFolderMetadataByIdHeadersInput {
317
  /**
318
   * Extra headers that will be included in the HTTP request. */
319
  readonly extraHeaders?: {
320
    readonly [key: string]: undefined | string;
321
  };
322
}
323
export class FolderMetadataManager {
240✔
324
  readonly auth?: Authentication;
325
  readonly networkSession: NetworkSession = new NetworkSession({});
513✔
326
  constructor(
327
    fields: Omit<
328
      FolderMetadataManager,
329
      | 'networkSession'
330
      | 'getFolderMetadata'
331
      | 'getFolderMetadataById'
332
      | 'createFolderMetadataById'
333
      | 'updateFolderMetadataById'
334
      | 'deleteFolderMetadataById'
335
    > &
336
      Partial<Pick<FolderMetadataManager, 'networkSession'>>,
337
  ) {
338
    if (fields.auth !== undefined) {
513✔
339
      this.auth = fields.auth;
513✔
340
    }
341
    if (fields.networkSession !== undefined) {
513✔
342
      this.networkSession = fields.networkSession;
513✔
343
    }
344
  }
345
  /**
346
     * Retrieves all metadata for a given folder. This can not be used on the root
347
     * folder with ID `0`.
348
     * @param {string} folderId The unique identifier that represent a folder.
349
    
350
    The ID for any folder can be determined
351
    by visiting this folder in the web application
352
    and copying the ID from the URL. For example,
353
    for the URL `https://*.app.box.com/folder/123`
354
    the `folder_id` is `123`.
355
    
356
    The root folder of a Box account is
357
    always represented by the ID `0`.
358
    Example: "12345"
359
     * @param {GetFolderMetadataOptionalsInput} optionalsInput
360
     * @returns {Promise<Metadatas>}
361
     */
362
  async getFolderMetadata(
363
    folderId: string,
3✔
364
    optionalsInput: GetFolderMetadataOptionalsInput = {},
3✔
365
  ): Promise<Metadatas> {
366
    const optionals: GetFolderMetadataOptionals =
367
      new GetFolderMetadataOptionals({
3✔
368
        queryParams: optionalsInput.queryParams,
369
        headers: optionalsInput.headers,
370
        cancellationToken: optionalsInput.cancellationToken,
371
      });
372
    const queryParams: any = optionals.queryParams;
3✔
373
    const headers: any = optionals.headers;
3✔
374
    const cancellationToken: any = optionals.cancellationToken;
3✔
375
    const queryParamsMap: {
376
      readonly [key: string]: string;
377
    } = prepareParams({ ['view']: toString(queryParams.view) as string });
3✔
378
    const headersMap: {
379
      readonly [key: string]: string;
380
    } = prepareParams({ ...{}, ...headers.extraHeaders });
3✔
381
    const response: FetchResponse =
382
      await this.networkSession.networkClient.fetch(
3✔
383
        new FetchOptions({
384
          url: ''.concat(
385
            this.networkSession.baseUrls.baseUrl,
386
            '/2.0/folders/',
387
            toString(folderId) as string,
388
            '/metadata',
389
          ) as string,
390
          method: 'GET',
391
          params: queryParamsMap,
392
          headers: headersMap,
393
          responseFormat: 'json' as ResponseFormat,
394
          auth: this.auth,
395
          networkSession: this.networkSession,
396
          cancellationToken: cancellationToken,
397
        }),
398
      );
399
    return {
3✔
400
      ...deserializeMetadatas(response.data!),
401
      rawData: response.data!,
402
    };
403
  }
404
  /**
405
     * Retrieves the instance of a metadata template that has been applied to a
406
     * folder. This can not be used on the root folder with ID `0`.
407
     * @param {string} folderId The unique identifier that represent a folder.
408
    
409
    The ID for any folder can be determined
410
    by visiting this folder in the web application
411
    and copying the ID from the URL. For example,
412
    for the URL `https://*.app.box.com/folder/123`
413
    the `folder_id` is `123`.
414
    
415
    The root folder of a Box account is
416
    always represented by the ID `0`.
417
    Example: "12345"
418
     * @param {GetFolderMetadataByIdScope} scope The scope of the metadata template.
419
    Example: "global"
420
     * @param {string} templateKey The name of the metadata template.
421
    Example: "properties"
422
     * @param {GetFolderMetadataByIdOptionalsInput} optionalsInput
423
     * @returns {Promise<MetadataFull>}
424
     */
425
  async getFolderMetadataById(
426
    folderId: string,
9✔
427
    scope: GetFolderMetadataByIdScope,
428
    templateKey: string,
429
    optionalsInput: GetFolderMetadataByIdOptionalsInput = {},
9✔
430
  ): Promise<MetadataFull> {
431
    const optionals: GetFolderMetadataByIdOptionals =
432
      new GetFolderMetadataByIdOptionals({
9✔
433
        headers: optionalsInput.headers,
434
        cancellationToken: optionalsInput.cancellationToken,
435
      });
436
    const headers: any = optionals.headers;
9✔
437
    const cancellationToken: any = optionals.cancellationToken;
9✔
438
    const headersMap: {
439
      readonly [key: string]: string;
440
    } = prepareParams({ ...{}, ...headers.extraHeaders });
9✔
441
    const response: FetchResponse =
442
      await this.networkSession.networkClient.fetch(
9✔
443
        new FetchOptions({
444
          url: ''.concat(
445
            this.networkSession.baseUrls.baseUrl,
446
            '/2.0/folders/',
447
            toString(folderId) as string,
448
            '/metadata/',
449
            toString(scope) as string,
450
            '/',
451
            toString(templateKey) as string,
452
          ) as string,
453
          method: 'GET',
454
          headers: headersMap,
455
          responseFormat: 'json' as ResponseFormat,
456
          auth: this.auth,
457
          networkSession: this.networkSession,
458
          cancellationToken: cancellationToken,
459
        }),
460
      );
461
    return {
6✔
462
      ...deserializeMetadataFull(response.data!),
463
      rawData: response.data!,
464
    };
465
  }
466
  /**
467
     * Applies an instance of a metadata template to a folder.
468
     *
469
     * In most cases only values that are present in the metadata template
470
     * will be accepted, except for the `global.properties` template which accepts
471
     * any key-value pair.
472
     *
473
     * To display the metadata template in the Box web app the enterprise needs to be
474
     * configured to enable **Cascading Folder Level Metadata** for the user in the
475
     * admin console.
476
     * @param {string} folderId The unique identifier that represent a folder.
477
    
478
    The ID for any folder can be determined
479
    by visiting this folder in the web application
480
    and copying the ID from the URL. For example,
481
    for the URL `https://*.app.box.com/folder/123`
482
    the `folder_id` is `123`.
483
    
484
    The root folder of a Box account is
485
    always represented by the ID `0`.
486
    Example: "12345"
487
     * @param {CreateFolderMetadataByIdScope} scope The scope of the metadata template.
488
    Example: "global"
489
     * @param {string} templateKey The name of the metadata template.
490
    Example: "properties"
491
     * @param {CreateFolderMetadataByIdRequestBody} requestBody Request body of createFolderMetadataById method
492
     * @param {CreateFolderMetadataByIdOptionalsInput} optionalsInput
493
     * @returns {Promise<MetadataFull>}
494
     */
495
  async createFolderMetadataById(
496
    folderId: string,
12✔
497
    scope: CreateFolderMetadataByIdScope,
498
    templateKey: string,
499
    requestBody: CreateFolderMetadataByIdRequestBody,
500
    optionalsInput: CreateFolderMetadataByIdOptionalsInput = {},
12✔
501
  ): Promise<MetadataFull> {
502
    const optionals: CreateFolderMetadataByIdOptionals =
503
      new CreateFolderMetadataByIdOptionals({
12✔
504
        headers: optionalsInput.headers,
505
        cancellationToken: optionalsInput.cancellationToken,
506
      });
507
    const headers: any = optionals.headers;
12✔
508
    const cancellationToken: any = optionals.cancellationToken;
12✔
509
    const headersMap: {
510
      readonly [key: string]: string;
511
    } = prepareParams({ ...{}, ...headers.extraHeaders });
12✔
512
    const response: FetchResponse =
513
      await this.networkSession.networkClient.fetch(
12✔
514
        new FetchOptions({
515
          url: ''.concat(
516
            this.networkSession.baseUrls.baseUrl,
517
            '/2.0/folders/',
518
            toString(folderId) as string,
519
            '/metadata/',
520
            toString(scope) as string,
521
            '/',
522
            toString(templateKey) as string,
523
          ) as string,
524
          method: 'POST',
525
          headers: headersMap,
526
          data: serializeCreateFolderMetadataByIdRequestBody(requestBody),
527
          contentType: 'application/json',
528
          responseFormat: 'json' as ResponseFormat,
529
          auth: this.auth,
530
          networkSession: this.networkSession,
531
          cancellationToken: cancellationToken,
532
        }),
533
      );
534
    return {
12✔
535
      ...deserializeMetadataFull(response.data!),
536
      rawData: response.data!,
537
    };
538
  }
539
  /**
540
     * Updates a piece of metadata on a folder.
541
     *
542
     * The metadata instance can only be updated if the template has already been
543
     * applied to the folder before. When editing metadata, only values that match
544
     * the metadata template schema will be accepted.
545
     *
546
     * The update is applied atomically. If any errors occur during the
547
     * application of the operations, the metadata instance will not be changed.
548
     * @param {string} folderId The unique identifier that represent a folder.
549
    
550
    The ID for any folder can be determined
551
    by visiting this folder in the web application
552
    and copying the ID from the URL. For example,
553
    for the URL `https://*.app.box.com/folder/123`
554
    the `folder_id` is `123`.
555
    
556
    The root folder of a Box account is
557
    always represented by the ID `0`.
558
    Example: "12345"
559
     * @param {UpdateFolderMetadataByIdScope} scope The scope of the metadata template.
560
    Example: "global"
561
     * @param {string} templateKey The name of the metadata template.
562
    Example: "properties"
563
     * @param {readonly UpdateFolderMetadataByIdRequestBody[]} requestBody Request body of updateFolderMetadataById method
564
     * @param {UpdateFolderMetadataByIdOptionalsInput} optionalsInput
565
     * @returns {Promise<MetadataFull>}
566
     */
567
  async updateFolderMetadataById(
568
    folderId: string,
6✔
569
    scope: UpdateFolderMetadataByIdScope,
570
    templateKey: string,
571
    requestBody: readonly UpdateFolderMetadataByIdRequestBody[],
572
    optionalsInput: UpdateFolderMetadataByIdOptionalsInput = {},
6✔
573
  ): Promise<MetadataFull> {
574
    const optionals: UpdateFolderMetadataByIdOptionals =
575
      new UpdateFolderMetadataByIdOptionals({
6✔
576
        headers: optionalsInput.headers,
577
        cancellationToken: optionalsInput.cancellationToken,
578
      });
579
    const headers: any = optionals.headers;
6✔
580
    const cancellationToken: any = optionals.cancellationToken;
6✔
581
    const headersMap: {
582
      readonly [key: string]: string;
583
    } = prepareParams({ ...{}, ...headers.extraHeaders });
6✔
584
    const response: FetchResponse =
585
      await this.networkSession.networkClient.fetch(
6✔
586
        new FetchOptions({
587
          url: ''.concat(
588
            this.networkSession.baseUrls.baseUrl,
589
            '/2.0/folders/',
590
            toString(folderId) as string,
591
            '/metadata/',
592
            toString(scope) as string,
593
            '/',
594
            toString(templateKey) as string,
595
          ) as string,
596
          method: 'PUT',
597
          headers: headersMap,
598
          data: requestBody.map(
599
            serializeUpdateFolderMetadataByIdRequestBody,
600
          ) as readonly any[],
601
          contentType: 'application/json-patch+json',
602
          responseFormat: 'json' as ResponseFormat,
603
          auth: this.auth,
604
          networkSession: this.networkSession,
605
          cancellationToken: cancellationToken,
606
        }),
607
      );
608
    return {
6✔
609
      ...deserializeMetadataFull(response.data!),
610
      rawData: response.data!,
611
    };
612
  }
613
  /**
614
     * Deletes a piece of folder metadata.
615
     * @param {string} folderId The unique identifier that represent a folder.
616
    
617
    The ID for any folder can be determined
618
    by visiting this folder in the web application
619
    and copying the ID from the URL. For example,
620
    for the URL `https://*.app.box.com/folder/123`
621
    the `folder_id` is `123`.
622
    
623
    The root folder of a Box account is
624
    always represented by the ID `0`.
625
    Example: "12345"
626
     * @param {DeleteFolderMetadataByIdScope} scope The scope of the metadata template.
627
    Example: "global"
628
     * @param {string} templateKey The name of the metadata template.
629
    Example: "properties"
630
     * @param {DeleteFolderMetadataByIdOptionalsInput} optionalsInput
631
     * @returns {Promise<undefined>}
632
     */
633
  async deleteFolderMetadataById(
634
    folderId: string,
9✔
635
    scope: DeleteFolderMetadataByIdScope,
636
    templateKey: string,
637
    optionalsInput: DeleteFolderMetadataByIdOptionalsInput = {},
9✔
638
  ): Promise<undefined> {
639
    const optionals: DeleteFolderMetadataByIdOptionals =
640
      new DeleteFolderMetadataByIdOptionals({
9✔
641
        headers: optionalsInput.headers,
642
        cancellationToken: optionalsInput.cancellationToken,
643
      });
644
    const headers: any = optionals.headers;
9✔
645
    const cancellationToken: any = optionals.cancellationToken;
9✔
646
    const headersMap: {
647
      readonly [key: string]: string;
648
    } = prepareParams({ ...{}, ...headers.extraHeaders });
9✔
649
    const response: FetchResponse =
650
      await this.networkSession.networkClient.fetch(
9✔
651
        new FetchOptions({
652
          url: ''.concat(
653
            this.networkSession.baseUrls.baseUrl,
654
            '/2.0/folders/',
655
            toString(folderId) as string,
656
            '/metadata/',
657
            toString(scope) as string,
658
            '/',
659
            toString(templateKey) as string,
660
          ) as string,
661
          method: 'DELETE',
662
          headers: headersMap,
663
          responseFormat: 'no_content' as ResponseFormat,
664
          auth: this.auth,
665
          networkSession: this.networkSession,
666
          cancellationToken: cancellationToken,
667
        }),
668
      );
669
    return void 0;
9✔
670
  }
671
}
672
export interface FolderMetadataManagerInput {
673
  readonly auth?: Authentication;
674
  readonly networkSession?: NetworkSession;
675
}
676
export function serializeGetFolderMetadataByIdScope(
240✔
677
  val: GetFolderMetadataByIdScope,
678
): SerializedData {
679
  return val;
×
680
}
681
export function deserializeGetFolderMetadataByIdScope(
240✔
682
  val: SerializedData,
683
): GetFolderMetadataByIdScope {
684
  if (val == 'global') {
×
685
    return val;
×
686
  }
687
  if (val == 'enterprise') {
×
UNCOV
688
    return val;
×
689
  }
UNCOV
690
  if (sdIsString(val)) {
×
UNCOV
691
    return val;
×
692
  }
UNCOV
693
  throw new BoxSdkError({
×
694
    message: "Can't deserialize GetFolderMetadataByIdScope",
695
  });
696
}
697
export function serializeCreateFolderMetadataByIdScope(
240✔
698
  val: CreateFolderMetadataByIdScope,
699
): SerializedData {
UNCOV
700
  return val;
×
701
}
702
export function deserializeCreateFolderMetadataByIdScope(
240✔
703
  val: SerializedData,
704
): CreateFolderMetadataByIdScope {
UNCOV
705
  if (val == 'global') {
×
UNCOV
706
    return val;
×
707
  }
708
  if (val == 'enterprise') {
×
UNCOV
709
    return val;
×
710
  }
UNCOV
711
  if (sdIsString(val)) {
×
UNCOV
712
    return val;
×
713
  }
UNCOV
714
  throw new BoxSdkError({
×
715
    message: "Can't deserialize CreateFolderMetadataByIdScope",
716
  });
717
}
718
export function serializeCreateFolderMetadataByIdRequestBody(
240✔
719
  val: CreateFolderMetadataByIdRequestBody,
720
): SerializedData {
721
  return Object.fromEntries(
12✔
722
    Object.entries(val).map(([k, v]: [string, any]) => [
36✔
723
      k,
724
      (function (v: any): any {
725
        return v;
36✔
726
      })(v),
727
    ]),
728
  ) as {
729
    readonly [key: string]: any;
730
  };
731
}
732
export function deserializeCreateFolderMetadataByIdRequestBody(
240✔
733
  val: SerializedData,
734
): CreateFolderMetadataByIdRequestBody {
735
  return sdIsMap(val)
×
736
    ? (Object.fromEntries(
UNCOV
737
        Object.entries(val).map(([k, v]: [string, any]) => [
×
738
          k,
739
          (function (v: any): any {
UNCOV
740
            return v;
×
741
          })(v),
742
        ]),
743
      ) as {
744
        readonly [key: string]: any;
745
      })
746
    : {};
747
}
748
export function serializeUpdateFolderMetadataByIdScope(
240✔
749
  val: UpdateFolderMetadataByIdScope,
750
): SerializedData {
751
  return val;
×
752
}
753
export function deserializeUpdateFolderMetadataByIdScope(
240✔
754
  val: SerializedData,
755
): UpdateFolderMetadataByIdScope {
756
  if (val == 'global') {
×
757
    return val;
×
758
  }
759
  if (val == 'enterprise') {
×
760
    return val;
×
761
  }
762
  if (sdIsString(val)) {
×
763
    return val;
×
764
  }
765
  throw new BoxSdkError({
×
766
    message: "Can't deserialize UpdateFolderMetadataByIdScope",
767
  });
768
}
769
export function serializeUpdateFolderMetadataByIdRequestBodyOpField(
240✔
770
  val: UpdateFolderMetadataByIdRequestBodyOpField,
771
): SerializedData {
772
  return val;
18✔
773
}
774
export function deserializeUpdateFolderMetadataByIdRequestBodyOpField(
240✔
775
  val: SerializedData,
776
): UpdateFolderMetadataByIdRequestBodyOpField {
UNCOV
777
  if (val == 'add') {
×
UNCOV
778
    return val;
×
779
  }
UNCOV
780
  if (val == 'replace') {
×
UNCOV
781
    return val;
×
782
  }
UNCOV
783
  if (val == 'remove') {
×
UNCOV
784
    return val;
×
785
  }
UNCOV
786
  if (val == 'test') {
×
UNCOV
787
    return val;
×
788
  }
UNCOV
789
  if (val == 'move') {
×
UNCOV
790
    return val;
×
791
  }
UNCOV
792
  if (val == 'copy') {
×
UNCOV
793
    return val;
×
794
  }
795
  if (sdIsString(val)) {
×
UNCOV
796
    return val;
×
797
  }
UNCOV
798
  throw new BoxSdkError({
×
799
    message: "Can't deserialize UpdateFolderMetadataByIdRequestBodyOpField",
800
  });
801
}
802
export function serializeUpdateFolderMetadataByIdRequestBody(
240✔
803
  val: UpdateFolderMetadataByIdRequestBody,
804
): SerializedData {
805
  return {
18✔
806
    ['op']:
807
      val.op == void 0
18!
808
        ? val.op
809
        : serializeUpdateFolderMetadataByIdRequestBodyOpField(val.op),
810
    ['path']: val.path,
811
    ['value']:
812
      val.value == void 0
18!
813
        ? val.value
814
        : serializeMetadataInstanceValue(val.value),
815
    ['from']: val.from,
816
  };
817
}
818
export function deserializeUpdateFolderMetadataByIdRequestBody(
240✔
819
  val: SerializedData,
820
): UpdateFolderMetadataByIdRequestBody {
UNCOV
821
  if (!sdIsMap(val)) {
×
UNCOV
822
    throw new BoxSdkError({
×
823
      message: 'Expecting a map for "UpdateFolderMetadataByIdRequestBody"',
824
    });
825
  }
826
  const op: undefined | UpdateFolderMetadataByIdRequestBodyOpField =
UNCOV
827
    val.op == void 0
×
828
      ? void 0
829
      : deserializeUpdateFolderMetadataByIdRequestBodyOpField(val.op);
UNCOV
830
  if (!(val.path == void 0) && !sdIsString(val.path)) {
×
UNCOV
831
    throw new BoxSdkError({
×
832
      message:
833
        'Expecting string for "path" of type "UpdateFolderMetadataByIdRequestBody"',
834
    });
835
  }
UNCOV
836
  const path: undefined | string = val.path == void 0 ? void 0 : val.path;
×
837
  const value: undefined | MetadataInstanceValue =
838
    val.value == void 0 ? void 0 : deserializeMetadataInstanceValue(val.value);
×
UNCOV
839
  if (!(val.from == void 0) && !sdIsString(val.from)) {
×
840
    throw new BoxSdkError({
×
841
      message:
842
        'Expecting string for "from" of type "UpdateFolderMetadataByIdRequestBody"',
843
    });
844
  }
UNCOV
845
  const from: undefined | string = val.from == void 0 ? void 0 : val.from;
×
UNCOV
846
  return {
×
847
    op: op,
848
    path: path,
849
    value: value,
850
    from: from,
851
  } satisfies UpdateFolderMetadataByIdRequestBody;
852
}
853
export function serializeDeleteFolderMetadataByIdScope(
240✔
854
  val: DeleteFolderMetadataByIdScope,
855
): SerializedData {
UNCOV
856
  return val;
×
857
}
858
export function deserializeDeleteFolderMetadataByIdScope(
240✔
859
  val: SerializedData,
860
): DeleteFolderMetadataByIdScope {
UNCOV
861
  if (val == 'global') {
×
UNCOV
862
    return val;
×
863
  }
UNCOV
864
  if (val == 'enterprise') {
×
UNCOV
865
    return val;
×
866
  }
UNCOV
867
  if (sdIsString(val)) {
×
UNCOV
868
    return val;
×
869
  }
UNCOV
870
  throw new BoxSdkError({
×
871
    message: "Can't deserialize DeleteFolderMetadataByIdScope",
872
  });
873
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc