diff --git a/docs/content-services/services/legal-hold.service.md b/docs/content-services/services/legal-hold.service.md index ecd5905ad1..33e0aee35c 100644 --- a/docs/content-services/services/legal-hold.service.md +++ b/docs/content-services/services/legal-hold.service.md @@ -49,19 +49,26 @@ Manages holds for nodes. - _nodeId_: `string` - The Id of the node which is unassigned - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`` -- **bulkAssignHold**(holdId: `string`, query: [`RequestQuery`](../../../lib/js-api/src/api/search-rest-api/docs/RequestQuery.md)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`BulkAssignHoldResponse`](../../../lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponse.md)`>`
+- **bulkAssignHold**(holdId: `string`, query: [`RequestQuery`](../../../lib/js-api/src/api/search-rest-api/docs/RequestQuery.md)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`BulkAssignHoldResponseEntry`](../../../lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponseEntry.md)`>`
Assign multiple files to a hold. - _holdId_: `string` - The hold id - _query_: [`RequestQuery`](../../../lib/js-api/src/api/search-rest-api/docs/RequestQuery.md) - Search query - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`BulkAssignHoldResponse`](../../../lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponse.md)`>` - Bulk status
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`BulkAssignHoldResponseEntry`](../../../lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponseEntry.md)`>` - Bulk operation description
-- **bulkAssignHoldToFolder**(holdId: `string`, folderId: `string`, language: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`BulkAssignHoldResponse`](../../../lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponse.md)`>`
+- **bulkAssignHoldToFolder**(holdId: `string`, folderId: `string`, language: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`BulkAssignHoldResponseEntry`](../../../lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponseEntry.md)`>`
Assign a folder to a hold. - _holdId_: `string` - The hold id - _folderId_: `string` - The folder id - _language_: `string` - Language code. `afts` can be used for search query - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`BulkAssignHoldResponse`](../../../lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponse.md)`>` - Bulk status
+ - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`BulkAssignHoldResponseEntry`](../../../lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponseEntry.md)`>` - Bulk operation description
+ +- **getBulkOperationStatus**(bulkStatusId: `string`, holdId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`HoldBulkStatusEntry`](../../../lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkStatusEntry.md)`>`
+ Get current status of bulk operation. + - _bulkStatusId_: `string` - The bulk operation id + - _holdId_: `string` - The hold id + + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`HoldBulkStatusEntry`](../../../lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkStatusEntry.md)`>` - Current status of bulk operation
## Details diff --git a/lib/content-services/src/lib/legal-hold/services/legal-holds.service.spec.ts b/lib/content-services/src/lib/legal-hold/services/legal-hold.service.spec.ts similarity index 82% rename from lib/content-services/src/lib/legal-hold/services/legal-holds.service.spec.ts rename to lib/content-services/src/lib/legal-hold/services/legal-hold.service.spec.ts index 1d30e7aa11..26ef863b35 100644 --- a/lib/content-services/src/lib/legal-hold/services/legal-holds.service.spec.ts +++ b/lib/content-services/src/lib/legal-hold/services/legal-hold.service.spec.ts @@ -18,7 +18,7 @@ import { TestBed } from '@angular/core/testing'; import { LegalHoldService } from './legal-hold.service'; import { ContentTestingModule } from '../../testing/content.testing.module'; -import { BulkAssignHoldResponse, Hold, HoldEntry, HoldPaging, RequestQuery, SEARCH_LANGUAGE } from '@alfresco/js-api'; +import { BulkAssignHoldResponseEntry, Hold, HoldBulkStatusEntry, HoldEntry, HoldPaging, RequestQuery, SEARCH_LANGUAGE } from '@alfresco/js-api'; describe('LegalHoldsService', () => { let service: LegalHoldService; @@ -28,7 +28,29 @@ describe('LegalHoldsService', () => { const filePlanId = 'mockId'; const nodeId = 'mockNodeId'; const holdId = 'holdId'; - const mockBulkResponse: BulkAssignHoldResponse = { totalItems: 3, bulkStatusId: 'bulkStatus' }; + const mockBulkResponse: BulkAssignHoldResponseEntry = { + entry: { + totalItems: 3, + bulkStatusId: 'bulkStatus' + } + }; + const mockBulkStatusResponse: HoldBulkStatusEntry = { + entry: { + bulkStatusId: 'bulkStatus', + status: 'IN_PROGRESS', + totalItems: 3, + processedItems: 2, + errorsCount: 0, + startTime: new Date('2024'), + holdBulkOperation: { + op: 'ADD', + query: { + query: 'mockQuery', + language: SEARCH_LANGUAGE.AFTS + } + } + } + }; beforeEach(() => { TestBed.configureTestingModule({ @@ -184,4 +206,17 @@ describe('LegalHoldsService', () => { }); }); }); + + describe('getBulkOperationStatus', () => { + it('should get bulk operation status based on bulkStatusId and nodeId', (done) => { + spyOn(service.legalHoldApi, 'getBulkStatus').and.returnValue(Promise.resolve(mockBulkStatusResponse)); + const bulkStatusId = 'mockBulkStatusId'; + + service.getBulkOperationStatus(bulkStatusId, nodeId).subscribe((response) => { + expect(response).toEqual(mockBulkStatusResponse); + expect(service.legalHoldApi.getBulkStatus).toHaveBeenCalledWith(bulkStatusId, nodeId); + done(); + }); + }); + }); }); diff --git a/lib/content-services/src/lib/legal-hold/services/legal-hold.service.ts b/lib/content-services/src/lib/legal-hold/services/legal-hold.service.ts index e33c7056cb..09b729d4ff 100644 --- a/lib/content-services/src/lib/legal-hold/services/legal-hold.service.ts +++ b/lib/content-services/src/lib/legal-hold/services/legal-hold.service.ts @@ -16,7 +16,17 @@ */ import { AlfrescoApiService } from '@alfresco/adf-core'; -import { BulkAssignHoldResponse, ContentPagingQuery, Hold, HoldBody, HoldEntry, HoldPaging, LegalHoldApi, RequestQuery } from '@alfresco/js-api'; +import { + BulkAssignHoldResponseEntry, + ContentPagingQuery, + Hold, + HoldBody, + HoldBulkStatusEntry, + HoldEntry, + HoldPaging, + LegalHoldApi, + RequestQuery +} from '@alfresco/js-api'; import { Injectable } from '@angular/core'; import { Observable, from } from 'rxjs'; import { map } from 'rxjs/operators'; @@ -104,9 +114,9 @@ export class LegalHoldService { * * @param holdId The identifier of a hold * @param query Search query - * @returns Observable + * @returns Observable */ - bulkAssignHold(holdId: string, query: RequestQuery): Observable { + bulkAssignHold(holdId: string, query: RequestQuery): Observable { return from(this.legalHoldApi.bulkAssignHold(holdId, query)); } @@ -116,9 +126,9 @@ export class LegalHoldService { * @param holdId The identifier of a hold * @param folderId The identifier of a folder * @param language Language code - * @returns Observable + * @returns Observable */ - bulkAssignHoldToFolder(holdId: string, folderId: string, language: string): Observable { + bulkAssignHoldToFolder(holdId: string, folderId: string, language: string): Observable { const query: RequestQuery = { query: `ANCESTOR:'workspace://SpacesStore/${folderId}' and TYPE:content`, language @@ -126,4 +136,15 @@ export class LegalHoldService { return from(this.legalHoldApi.bulkAssignHold(holdId, query)); } + + /** + * Get status of bulk operation with **bulkStatusId** for **holdId**. + * + * @param bulkStatusId The identifier of a bulk status + * @param holdId The identifier of a hold + * @returns Promise + */ + getBulkOperationStatus(bulkStatusId: string, holdId: string): Observable { + return from(this.legalHoldApi.getBulkStatus(bulkStatusId, holdId)); + } } diff --git a/lib/js-api/src/api/gs-core-rest-api/api/legal-hold.api.ts b/lib/js-api/src/api/gs-core-rest-api/api/legal-hold.api.ts index c29af3f9e3..f3109fb5d7 100644 --- a/lib/js-api/src/api/gs-core-rest-api/api/legal-hold.api.ts +++ b/lib/js-api/src/api/gs-core-rest-api/api/legal-hold.api.ts @@ -18,9 +18,9 @@ import { BaseApi } from './base.api'; import { throwIfNotDefined } from '../../../assert'; import { ContentPagingQuery } from '../../content-rest-api'; -import { HoldBody, HoldEntry, HoldPaging } from './../model'; -import { BulkAssignHoldResponse } from '../model/bulkAssignHoldResponse'; +import { BulkAssignHoldResponseEntry, HoldBody, HoldEntry, HoldPaging } from './../model'; import { RequestQuery } from '../../search-rest-api'; +import { HoldBulkStatusEntry } from '../model/holdBulkStatusEntry'; /** * Legal Holds service. @@ -161,9 +161,9 @@ export class LegalHoldApi extends BaseApi { * * @param holdId The identifier of a hold * @param query Search query - * @returns Promise + * @returns Promise */ - bulkAssignHold(holdId: string, query: RequestQuery): Promise { + bulkAssignHold(holdId: string, query: RequestQuery): Promise { throwIfNotDefined(holdId, 'holdId'); throwIfNotDefined(query, 'query'); @@ -176,4 +176,22 @@ export class LegalHoldApi extends BaseApi { } }); } + + /** + * Get status of bulk operation with **bulkStatusId** for **holdId**. + * + * @param bulkStatusId The identifier of a bulk status + * @param holdId The identifier of a hold + * @returns Promise + */ + getBulkStatus(bulkStatusId: string, holdId: string): Promise { + throwIfNotDefined(holdId, 'holdId'); + throwIfNotDefined(bulkStatusId, 'bulkStatusId'); + + return this.get({ + path: `/holds/{holdId}/bulk-statuses/{bulkStatusId}`, + pathParams: { holdId, bulkStatusId }, + returnType: HoldBulkStatusEntry + }); + } } diff --git a/lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponseEntry.md b/lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponseEntry.md new file mode 100644 index 0000000000..81601e5512 --- /dev/null +++ b/lib/js-api/src/api/gs-core-rest-api/docs/BulkAssignHoldResponseEntry.md @@ -0,0 +1,7 @@ +# BulkAssignHoldResponseEntry + +## Properties + +| Name | Type | Description | +| --------- | ------------------------------------------------------- | -------------------------------------------------- | +| **Entry** | [**BulkAssignHoldResponse**](BulkAssignHoldResponse.md) | Response received after bulk assign hold operation | diff --git a/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkOperation.md b/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkOperation.md new file mode 100644 index 0000000000..90cf85bb5b --- /dev/null +++ b/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkOperation.md @@ -0,0 +1,8 @@ +# HoldBulkOperation + +## Properties + +| Name | Type | Default value | Description | +| --------- | -------------------------------------------------------------- | ------------- | ---------------------------------------------------- | +| **op** | **string** | | Operations type. Currently only **ADD** type exists. | +| **query** | [**RequestQuery**](../../search-rest-api/docs/RequestQuery.md) | | Query to get files to assign to a hold. | diff --git a/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkStatus.md b/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkStatus.md new file mode 100644 index 0000000000..be7a848811 --- /dev/null +++ b/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkStatus.md @@ -0,0 +1,14 @@ +# HoldBulkStatus + +## Properties + +| Name | Type | Description | Notes | +|---------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | +| **bulkStatusId** | **string** | Bulk status id | | +| **errorsCount** | **number** | Number of errors thrown during bulk operation | | +| **holdBulkOperation** | [**HoldBulkOperation**](HoldBulkOperation.md) | Specifies operation type and targeted files | | +| **processedItems** | **number** | Number of processed files | | +| **status** | **string** | Current status of operation | | +| **totalItems** | **number** | Number of targeted files | | +| **startTime** | **Date** | Date and time of operation start | | +| **endTime** | **Date** | Date and time of operation end | Is included only after operation is completed | diff --git a/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkStatusEntry.md b/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkStatusEntry.md new file mode 100644 index 0000000000..764b6d9855 --- /dev/null +++ b/lib/js-api/src/api/gs-core-rest-api/docs/HoldBulkStatusEntry.md @@ -0,0 +1,7 @@ +# HoldBulkStatusEntry + +## Properties + +| Name | Type | Description | +|---------------------- | --------------------------------------------- | --------------------------------------------- | +| **entry** | [**HoldBulkStatus**](HoldBulkStatus.md) | Current status of hulk assign holds operation | diff --git a/lib/js-api/src/api/gs-core-rest-api/docs/LegalHoldApi.md b/lib/js-api/src/api/gs-core-rest-api/docs/LegalHoldApi.md index 0e6bf6832e..a5e8815f4e 100644 --- a/lib/js-api/src/api/gs-core-rest-api/docs/LegalHoldApi.md +++ b/lib/js-api/src/api/gs-core-rest-api/docs/LegalHoldApi.md @@ -2,15 +2,16 @@ All URIs are relative to _https://localhost/alfresco/api/-default-/public/gs/versions/1_ -| Method | HTTP request | Description | -| ------------------------------------------------ | -------------------------------------------- | ----------------------------- | -| [**getHolds**](LegalHoldApi.md#getHolds) | **GET** /file-plans/{filePlanId}/holds | Get legal holds list | -| [**assignHold**](LegalHoldApi.md#assignHold) | **POST** /holds/{holdId}/children | Assign node to legal hold | -| [**assignHolds**](LegalHoldApi.md#assignHolds) | **POST** /holds/{holdId}/children | Assign nodes to legal hold | -| [**unassignHold**](LegalHoldApi.md#unassignHold) | **DELETE** /holds/{holdId}/children/{nodeId} | Unassign node from legal hold | -| [**createHold**](LegalHoldApi.md#createHold) | **POST** /file-plans/{filePlanId}/holds | Create one hold | -| [**createHolds**](LegalHoldApi.md#createHolds) | **POST** /file-plans/{filePlanId}/holds | Create list of holds | -| [**bulkAssignHold**](LegalHoldApi.md#bulkAssignHold) | **POST** /holds/{holdId}/bulk | Bulk add of nodes to the hold | +| Method | HTTP request | Description | +| ---------------------------------------------------- | ---------------------------------------------------- | ------------------------------------ | +| [**getHolds**](LegalHoldApi.md#getHolds) | **GET** /file-plans/{filePlanId}/holds | Get legal holds list | +| [**assignHold**](LegalHoldApi.md#assignHold) | **POST** /holds/{holdId}/children | Assign node to legal hold | +| [**assignHolds**](LegalHoldApi.md#assignHolds) | **POST** /holds/{holdId}/children | Assign nodes to legal hold | +| [**unassignHold**](LegalHoldApi.md#unassignHold) | **DELETE** /holds/{holdId}/children/{nodeId} | Unassign node from legal hold | +| [**createHold**](LegalHoldApi.md#createHold) | **POST** /file-plans/{filePlanId}/holds | Create one hold | +| [**createHolds**](LegalHoldApi.md#createHolds) | **POST** /file-plans/{filePlanId}/holds | Create list of holds | +| [**bulkAssignHold**](LegalHoldApi.md#bulkAssignHold) | **POST** /holds/{holdId}/bulk | Bulk add of nodes to the hold | +| [**getBulkStatus**](LegalHoldApi.md#getBulkStatus) | **GET** /holds/{holdId}/bulk-statuses/{bulkStatusId} | Get current status of bulk operation | @@ -324,3 +325,43 @@ legalHoldApi.bulkAssignHold('holdId', { query: 'SITE:swsdp and TYPE:content', la ### Return type [**BulkAssignHoldResponse**](./BulkAssignHoldResponse.md) + +# **getBulkStatus** + +> HoldBulkStatusEntry getBulkStatus(holdId, bulkOperationId) + +Get current status of asynchronous bulk operations with `bulkStatusId` happening for hold with `holdId` + +### Example + +```javascript +import LegalHoldApi from 'LegalHoldApi'; +import { AlfrescoApi } from '@alfresco/js-api'; + +this.alfrescoApi = new AlfrescoApi(); +this.alfrescoApi.setConfig({ + hostEcm: 'http://127.0.0.1:8080' +}); + +const legalHoldApi = new LegalHoldApi(this.alfrescoApi); + +legalHoldApi.bulkAssignHold('holdId', 'bulkOperationId').then( + (data) => { + console.log('API called successfully. Returned data: ' + data); + }, + function (error) { + console.error(error); + } +); +``` + +### Parameters + +| Name | Type | Default value | Description | +| ------------------- | ---------- | ------------- | ---------------------------------- | +| **holdId** | **string** | | The identifier of a hold | +| **bulkOperationId** | **string** | | The identifies of a bulk operation | + +### Return type + +[**HoldBulkStatusEntry**](./HoldBulkStatusEntry.md) diff --git a/lib/js-api/src/api/gs-core-rest-api/model/bulkAssignHoldResponseEntry.ts b/lib/js-api/src/api/gs-core-rest-api/model/bulkAssignHoldResponseEntry.ts new file mode 100644 index 0000000000..a6c4fe0fa7 --- /dev/null +++ b/lib/js-api/src/api/gs-core-rest-api/model/bulkAssignHoldResponseEntry.ts @@ -0,0 +1,22 @@ +/*! + * @license + * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { BulkAssignHoldResponse } from './bulkAssignHoldResponse'; + +export interface BulkAssignHoldResponseEntry { + entry: BulkAssignHoldResponse; +} diff --git a/lib/js-api/src/api/gs-core-rest-api/model/holdBulkOperation.ts b/lib/js-api/src/api/gs-core-rest-api/model/holdBulkOperation.ts new file mode 100644 index 0000000000..e3e53691c4 --- /dev/null +++ b/lib/js-api/src/api/gs-core-rest-api/model/holdBulkOperation.ts @@ -0,0 +1,30 @@ +/*! + * @license + * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class HoldBulkOperation { + op: string; + query: { + language: string; + query: string; + }; + + constructor(input?: Partial) { + if (input) { + Object.assign(this, input); + } + } +} diff --git a/lib/js-api/src/api/gs-core-rest-api/model/holdBulkStatus.ts b/lib/js-api/src/api/gs-core-rest-api/model/holdBulkStatus.ts new file mode 100644 index 0000000000..ce77115a87 --- /dev/null +++ b/lib/js-api/src/api/gs-core-rest-api/model/holdBulkStatus.ts @@ -0,0 +1,38 @@ +/*! + * @license + * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { HoldBulkOperation } from './holdBulkOperation'; +import { DateAlfresco } from '../../content-custom-api'; + +export class HoldBulkStatus { + bulkStatusId: string; + errorsCount: number; + holdBulkOperation: HoldBulkOperation; + processedItems: number; + status: string; + totalItems: number; + startTime: Date; + endTime?: Date; + + constructor(input?: Partial) { + if (input) { + Object.assign(this, input); + this.startTime = input.startTime ? DateAlfresco.parseDate(input.startTime) : undefined; + this.endTime = input.endTime ? DateAlfresco.parseDate(input.endTime) : undefined; + } + } +} diff --git a/lib/js-api/src/api/gs-core-rest-api/model/holdBulkStatusEntry.ts b/lib/js-api/src/api/gs-core-rest-api/model/holdBulkStatusEntry.ts new file mode 100644 index 0000000000..bd501feea3 --- /dev/null +++ b/lib/js-api/src/api/gs-core-rest-api/model/holdBulkStatusEntry.ts @@ -0,0 +1,28 @@ +/*! + * @license + * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { HoldBulkStatus } from './holdBulkStatus'; + +export class HoldBulkStatusEntry { + entry: HoldBulkStatus; + + constructor(input?: Partial) { + if (input) { + Object.assign(this, input); + } + } +} diff --git a/lib/js-api/src/api/gs-core-rest-api/model/index.ts b/lib/js-api/src/api/gs-core-rest-api/model/index.ts index 78cb3dbf03..b9becef8b1 100644 --- a/lib/js-api/src/api/gs-core-rest-api/model/index.ts +++ b/lib/js-api/src/api/gs-core-rest-api/model/index.ts @@ -76,8 +76,12 @@ export * from './unfiledContainerChildAssociation'; export * from './unfiledRecordFolderChildAssociation'; export * from './hold'; export * from './holdBody'; +export * from './holdBulkOperation'; +export * from './holdBulkStatus'; +export * from './holdBulkStatusEntry'; export * from './holdEntry'; export * from './holdPaging'; export * from './holdPagingList'; export * from './nodeAssignedHold'; export * from './bulkAssignHoldResponse'; +export * from './bulkAssignHoldResponseEntry';