@alfresco/aca-playwright-shared 5.1.1-10706961491

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/api/api-client-factory.d.ts +63 -0
  2. package/api/categories-api.d.ts +32 -0
  3. package/api/favorites-api.d.ts +41 -0
  4. package/api/file-actions.d.ts +41 -0
  5. package/api/index.d.ts +37 -0
  6. package/api/node-content-tree.d.ts +32 -0
  7. package/api/nodes-api.d.ts +73 -0
  8. package/api/people-api-models.d.ts +42 -0
  9. package/api/queries-api.d.ts +32 -0
  10. package/api/rules-api.d.ts +79 -0
  11. package/api/search-api.d.ts +33 -0
  12. package/api/shared-links-api.d.ts +36 -0
  13. package/api/sites-api.d.ts +44 -0
  14. package/api/tags-api.d.ts +32 -0
  15. package/api/trashcan-api.d.ts +31 -0
  16. package/base-config/global-variables.d.ts +34 -0
  17. package/base-config/global.setup.d.ts +27 -0
  18. package/base-config/index.d.ts +26 -0
  19. package/base-config/playwright.config.d.ts +25 -0
  20. package/base-config/report-portal.config.d.ts +40 -0
  21. package/esm2020/alfresco-aca-playwright-shared.mjs +5 -0
  22. package/esm2020/api/api-client-factory.mjs +111 -0
  23. package/esm2020/api/categories-api.mjs +65 -0
  24. package/esm2020/api/favorites-api.mjs +129 -0
  25. package/esm2020/api/file-actions.mjs +166 -0
  26. package/esm2020/api/index.mjs +38 -0
  27. package/esm2020/api/node-content-tree.mjs +67 -0
  28. package/esm2020/api/nodes-api.mjs +427 -0
  29. package/esm2020/api/people-api-models.mjs +34 -0
  30. package/esm2020/api/queries-api.mjs +69 -0
  31. package/esm2020/api/rules-api.mjs +251 -0
  32. package/esm2020/api/search-api.mjs +74 -0
  33. package/esm2020/api/shared-links-api.mjs +136 -0
  34. package/esm2020/api/sites-api.mjs +155 -0
  35. package/esm2020/api/tags-api.mjs +61 -0
  36. package/esm2020/api/trashcan-api.mjs +54 -0
  37. package/esm2020/base-config/global-variables.mjs +36 -0
  38. package/esm2020/base-config/global.setup.mjs +66 -0
  39. package/esm2020/base-config/index.mjs +27 -0
  40. package/esm2020/base-config/playwright.config.mjs +78 -0
  41. package/esm2020/base-config/report-portal.config.mjs +48 -0
  42. package/esm2020/fixtures/index.mjs +25 -0
  43. package/esm2020/fixtures/page-initialization.mjs +83 -0
  44. package/esm2020/models/custom-config.mjs +25 -0
  45. package/esm2020/models/index.mjs +26 -0
  46. package/esm2020/models/user-model.mjs +55 -0
  47. package/esm2020/page-objects/components/aca-header.component.mjs +77 -0
  48. package/esm2020/page-objects/components/actions-dropdown.component.mjs +99 -0
  49. package/esm2020/page-objects/components/adf-info-drawer.component.mjs +83 -0
  50. package/esm2020/page-objects/components/base.component.mjs +69 -0
  51. package/esm2020/page-objects/components/breadcrumb/breadcrumb.component.mjs +46 -0
  52. package/esm2020/page-objects/components/conditions.component.mjs +75 -0
  53. package/esm2020/page-objects/components/dataTable/data-table.component.mjs +327 -0
  54. package/esm2020/page-objects/components/dataTable/index.mjs +27 -0
  55. package/esm2020/page-objects/components/dataTable/mat-menu.component.mjs +66 -0
  56. package/esm2020/page-objects/components/dataTable/toolbar.component.mjs +39 -0
  57. package/esm2020/page-objects/components/datetime-picker/datetime-picker.component.mjs +52 -0
  58. package/esm2020/page-objects/components/dialogs/adf-confirm-dialog.component.mjs +35 -0
  59. package/esm2020/page-objects/components/dialogs/adf-folder-dialog.component.mjs +56 -0
  60. package/esm2020/page-objects/components/dialogs/adf-library-dialog.component.mjs +63 -0
  61. package/esm2020/page-objects/components/dialogs/content-node-selector-dialog.mjs +67 -0
  62. package/esm2020/page-objects/components/dialogs/create-from-template-dialog-component.mjs +54 -0
  63. package/esm2020/page-objects/components/dialogs/delete-trash-dialog.component.mjs +53 -0
  64. package/esm2020/page-objects/components/dialogs/edit-dialog.component.mjs +38 -0
  65. package/esm2020/page-objects/components/dialogs/index.mjs +39 -0
  66. package/esm2020/page-objects/components/dialogs/link-rules.component.mjs +57 -0
  67. package/esm2020/page-objects/components/dialogs/manage-versions-dialog.component.mjs +35 -0
  68. package/esm2020/page-objects/components/dialogs/password-overlay-dialog.component.mjs +70 -0
  69. package/esm2020/page-objects/components/dialogs/share-dialog.component.mjs +84 -0
  70. package/esm2020/page-objects/components/dialogs/upload-dialog.component.mjs +35 -0
  71. package/esm2020/page-objects/components/dialogs/upload-new-version-dialog.component.mjs +37 -0
  72. package/esm2020/page-objects/components/dialogs/viewer-overlay-dialog.component.mjs +55 -0
  73. package/esm2020/page-objects/components/error.component.mjs +33 -0
  74. package/esm2020/page-objects/components/index.mjs +50 -0
  75. package/esm2020/page-objects/components/manageRules/index.mjs +26 -0
  76. package/esm2020/page-objects/components/manageRules/manage-rules-dialog.component.mjs +63 -0
  77. package/esm2020/page-objects/components/manageRules/manage-rules.component.mjs +69 -0
  78. package/esm2020/page-objects/components/pagination.component.mjs +173 -0
  79. package/esm2020/page-objects/components/search/search-filters/search-filters-categories.component.mjs +32 -0
  80. package/esm2020/page-objects/components/search/search-filters/search-filters-date.component.mjs +114 -0
  81. package/esm2020/page-objects/components/search/search-filters/search-filters-location.component.mjs +39 -0
  82. package/esm2020/page-objects/components/search/search-filters/search-filters-logic.component.mjs +35 -0
  83. package/esm2020/page-objects/components/search/search-filters/search-filters-properties.component.mjs +82 -0
  84. package/esm2020/page-objects/components/search/search-filters/search-filters-tags.component.mjs +39 -0
  85. package/esm2020/page-objects/components/search/search-filters.component.mjs +44 -0
  86. package/esm2020/page-objects/components/search/search-input.component.mjs +47 -0
  87. package/esm2020/page-objects/components/search/search-overlay.components.mjs +82 -0
  88. package/esm2020/page-objects/components/search/search-sorting-picker.components.mjs +71 -0
  89. package/esm2020/page-objects/components/sidenav.component.mjs +86 -0
  90. package/esm2020/page-objects/components/snackBar/snack-bar.component.mjs +53 -0
  91. package/esm2020/page-objects/components/spinner.component.mjs +40 -0
  92. package/esm2020/page-objects/components/viewer.component.mjs +92 -0
  93. package/esm2020/page-objects/index.mjs +26 -0
  94. package/esm2020/page-objects/pages/base.page.mjs +80 -0
  95. package/esm2020/page-objects/pages/favorites-libraries.page.mjs +42 -0
  96. package/esm2020/page-objects/pages/favorites.page.mjs +48 -0
  97. package/esm2020/page-objects/pages/index.mjs +35 -0
  98. package/esm2020/page-objects/pages/login.page.mjs +61 -0
  99. package/esm2020/page-objects/pages/my-libraries.page.mjs +53 -0
  100. package/esm2020/page-objects/pages/nodes.page.mjs +39 -0
  101. package/esm2020/page-objects/pages/personal-files.page.mjs +84 -0
  102. package/esm2020/page-objects/pages/recent-files.page.mjs +44 -0
  103. package/esm2020/page-objects/pages/search.page.mjs +78 -0
  104. package/esm2020/page-objects/pages/shared.page.mjs +44 -0
  105. package/esm2020/page-objects/pages/trash.page.mjs +44 -0
  106. package/esm2020/page-objects/playwright-base.mjs +31 -0
  107. package/esm2020/public-api.mjs +31 -0
  108. package/esm2020/resources/index.mjs +26 -0
  109. package/esm2020/resources/test-data/index.mjs +26 -0
  110. package/esm2020/resources/test-data/test-data-files-folders.mjs +53 -0
  111. package/esm2020/resources/test-data/test-data-permissions.mjs +331 -0
  112. package/esm2020/resources/test-files/index.mjs +78 -0
  113. package/esm2020/utils/api.mjs +43 -0
  114. package/esm2020/utils/config.mjs +70 -0
  115. package/esm2020/utils/error-strings.mjs +39 -0
  116. package/esm2020/utils/exclude-tests.mjs +35 -0
  117. package/esm2020/utils/index.mjs +34 -0
  118. package/esm2020/utils/library-errors.mjs +29 -0
  119. package/esm2020/utils/logger.mjs +69 -0
  120. package/esm2020/utils/paths.mjs +32 -0
  121. package/esm2020/utils/state-helper.mjs +29 -0
  122. package/esm2020/utils/timeouts.mjs +39 -0
  123. package/esm2020/utils/utils.mjs +144 -0
  124. package/fesm2015/alfresco-aca-playwright-shared.mjs +6251 -0
  125. package/fesm2015/alfresco-aca-playwright-shared.mjs.map +1 -0
  126. package/fesm2020/alfresco-aca-playwright-shared.mjs +6895 -0
  127. package/fesm2020/alfresco-aca-playwright-shared.mjs.map +1 -0
  128. package/fixtures/index.d.ts +24 -0
  129. package/fixtures/page-initialization.d.ts +47 -0
  130. package/index.d.ts +5 -0
  131. package/models/custom-config.d.ts +27 -0
  132. package/models/index.d.ts +25 -0
  133. package/models/user-model.d.ts +37 -0
  134. package/package.json +35 -0
  135. package/page-objects/components/aca-header.component.d.ts +53 -0
  136. package/page-objects/components/actions-dropdown.component.d.ts +71 -0
  137. package/page-objects/components/adf-info-drawer.component.d.ts +64 -0
  138. package/page-objects/components/base.component.d.ts +46 -0
  139. package/page-objects/components/breadcrumb/breadcrumb.component.d.ts +34 -0
  140. package/page-objects/components/conditions.component.d.ts +46 -0
  141. package/page-objects/components/dataTable/data-table.component.d.ts +185 -0
  142. package/page-objects/components/dataTable/index.d.ts +26 -0
  143. package/page-objects/components/dataTable/mat-menu.component.d.ts +41 -0
  144. package/page-objects/components/dataTable/toolbar.component.d.ts +33 -0
  145. package/page-objects/components/datetime-picker/datetime-picker.component.d.ts +36 -0
  146. package/page-objects/components/dialogs/adf-confirm-dialog.component.d.ts +33 -0
  147. package/page-objects/components/dialogs/adf-folder-dialog.component.d.ts +45 -0
  148. package/page-objects/components/dialogs/adf-library-dialog.component.d.ts +45 -0
  149. package/page-objects/components/dialogs/content-node-selector-dialog.d.ts +42 -0
  150. package/page-objects/components/dialogs/create-from-template-dialog-component.d.ts +39 -0
  151. package/page-objects/components/dialogs/delete-trash-dialog.component.d.ts +39 -0
  152. package/page-objects/components/dialogs/edit-dialog.component.d.ts +36 -0
  153. package/page-objects/components/dialogs/index.d.ts +38 -0
  154. package/page-objects/components/dialogs/link-rules.component.d.ts +40 -0
  155. package/page-objects/components/dialogs/manage-versions-dialog.component.d.ts +30 -0
  156. package/page-objects/components/dialogs/password-overlay-dialog.component.d.ts +42 -0
  157. package/page-objects/components/dialogs/share-dialog.component.d.ts +54 -0
  158. package/page-objects/components/dialogs/upload-dialog.component.d.ts +33 -0
  159. package/page-objects/components/dialogs/upload-new-version-dialog.component.d.ts +35 -0
  160. package/page-objects/components/dialogs/viewer-overlay-dialog.component.d.ts +43 -0
  161. package/page-objects/components/error.component.d.ts +31 -0
  162. package/page-objects/components/index.d.ts +49 -0
  163. package/page-objects/components/manageRules/index.d.ts +25 -0
  164. package/page-objects/components/manageRules/manage-rules-dialog.component.d.ts +51 -0
  165. package/page-objects/components/manageRules/manage-rules.component.d.ts +46 -0
  166. package/page-objects/components/pagination.component.d.ts +70 -0
  167. package/page-objects/components/search/search-filters/search-filters-categories.component.d.ts +30 -0
  168. package/page-objects/components/search/search-filters/search-filters-date.component.d.ts +73 -0
  169. package/page-objects/components/search/search-filters/search-filters-location.component.d.ts +32 -0
  170. package/page-objects/components/search/search-filters/search-filters-logic.component.d.ts +33 -0
  171. package/page-objects/components/search/search-filters/search-filters-properties.component.d.ts +42 -0
  172. package/page-objects/components/search/search-filters/search-filters-tags.component.d.ts +32 -0
  173. package/page-objects/components/search/search-filters.component.d.ts +42 -0
  174. package/page-objects/components/search/search-input.component.d.ts +40 -0
  175. package/page-objects/components/search/search-overlay.components.d.ts +45 -0
  176. package/page-objects/components/search/search-sorting-picker.components.d.ts +41 -0
  177. package/page-objects/components/sidenav.component.d.ts +45 -0
  178. package/page-objects/components/snackBar/snack-bar.component.d.ts +37 -0
  179. package/page-objects/components/spinner.component.d.ts +30 -0
  180. package/page-objects/components/viewer.component.d.ts +49 -0
  181. package/page-objects/index.d.ts +25 -0
  182. package/page-objects/pages/base.page.d.ts +52 -0
  183. package/page-objects/pages/favorites-libraries.page.d.ts +40 -0
  184. package/page-objects/pages/favorites.page.d.ts +44 -0
  185. package/page-objects/pages/index.d.ts +34 -0
  186. package/page-objects/pages/login.page.d.ts +48 -0
  187. package/page-objects/pages/my-libraries.page.d.ts +45 -0
  188. package/page-objects/pages/nodes.page.d.ts +37 -0
  189. package/page-objects/pages/personal-files.page.d.ts +57 -0
  190. package/page-objects/pages/recent-files.page.d.ts +42 -0
  191. package/page-objects/pages/search.page.d.ts +54 -0
  192. package/page-objects/pages/shared.page.d.ts +42 -0
  193. package/page-objects/pages/trash.page.d.ts +42 -0
  194. package/page-objects/playwright-base.d.ts +30 -0
  195. package/public-api.d.ts +30 -0
  196. package/resources/index.d.ts +25 -0
  197. package/resources/test-data/index.d.ts +25 -0
  198. package/resources/test-data/test-data-files-folders.d.ts +41 -0
  199. package/resources/test-data/test-data-permissions.d.ts +216 -0
  200. package/resources/test-files/index.d.ts +76 -0
  201. package/utils/api.d.ts +26 -0
  202. package/utils/config.d.ts +69 -0
  203. package/utils/error-strings.d.ts +38 -0
  204. package/utils/exclude-tests.d.ts +24 -0
  205. package/utils/index.d.ts +33 -0
  206. package/utils/library-errors.d.ts +28 -0
  207. package/utils/logger.d.ts +54 -0
  208. package/utils/paths.d.ts +30 -0
  209. package/utils/state-helper.d.ts +27 -0
  210. package/utils/timeouts.d.ts +38 -0
  211. package/utils/utils.d.ts +62 -0
@@ -0,0 +1,251 @@
1
+ /*!
2
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
3
+ *
4
+ * Alfresco Example Content Application
5
+ *
6
+ * This file is part of the Alfresco Example Content Application.
7
+ * If the software was purchased under a paid Alfresco license, the terms of
8
+ * the paid license agreement will prevail. Otherwise, the software is
9
+ * provided under the following open source license terms:
10
+ *
11
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
+ * it under the terms of the GNU Lesser General Public License as published by
13
+ * the Free Software Foundation, either version 3 of the License, or
14
+ * (at your option) any later version.
15
+ *
16
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Lesser General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Lesser General Public License
22
+ * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
+ */
24
+ import { ApiClientFactory } from './api-client-factory';
25
+ import * as crypto from 'crypto';
26
+ export class RulesApi {
27
+ constructor() {
28
+ this.apiService = new ApiClientFactory();
29
+ }
30
+ static async initialize(userName, password) {
31
+ const classObj = new RulesApi();
32
+ await classObj.apiService.setUpAcaBackend(userName, password);
33
+ return classObj;
34
+ }
35
+ callApi(path, httpMethod, body = {}) {
36
+ // APIs used by this service are still private and not yet available for public use
37
+ const params = [{}, {}, {}, {}, body, ['application/json'], ['application/json']];
38
+ return this.apiService.alfrescoApi.contentPrivateClient.callApi(path, httpMethod, ...params);
39
+ }
40
+ async createRule(nodeId, rule, ruleSetId = '-default-') {
41
+ const response = await this.callApi(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules`, 'POST', { ...rule });
42
+ return response.entry;
43
+ }
44
+ async createRandomRule(folderId, ruleName) {
45
+ const randomActionsIndex = crypto.randomInt(0, ActionTypes.actions.length);
46
+ const randomAction = ActionTypes.actions[randomActionsIndex];
47
+ return this.createRule(folderId, {
48
+ name: ruleName,
49
+ isEnabled: true,
50
+ actions: [randomAction]
51
+ });
52
+ }
53
+ async createRandomRuleWithMultipleConditions(folderId, ruleName, numOfConditions) {
54
+ if (numOfConditions > ConditionsTypes.conditions.length) {
55
+ numOfConditions = ConditionsTypes.conditions.length;
56
+ }
57
+ const randomActionsIndex = crypto.randomInt(0, ActionTypes.actions.length);
58
+ const randomAction = ActionTypes.actions[randomActionsIndex];
59
+ const conditionsArray = [];
60
+ for (let i = 0; i < numOfConditions; i++) {
61
+ const randomIndex = crypto.randomInt(0, ConditionsTypes.conditions.length);
62
+ const randomCondition = ConditionsTypes.conditions[randomIndex];
63
+ conditionsArray.push(randomCondition);
64
+ }
65
+ return this.createRule(folderId, {
66
+ name: ruleName,
67
+ isEnabled: true,
68
+ actions: [randomAction],
69
+ conditions: {
70
+ inverted: false,
71
+ booleanMode: 'and',
72
+ compositeConditions: conditionsArray
73
+ }
74
+ });
75
+ }
76
+ async createRandomRuleWithMultipleActions(folderId, ruleName, numOfActions) {
77
+ if (numOfActions > ActionTypes.actions.length) {
78
+ numOfActions = ActionTypes.actions.length;
79
+ }
80
+ const actionsArray = [];
81
+ for (let i = 0; i < numOfActions; i++) {
82
+ const randomIndex = crypto.randomInt(0, ActionTypes.actions.length);
83
+ const randomAction = ActionTypes.actions[randomIndex];
84
+ actionsArray.push(randomAction);
85
+ }
86
+ return this.createRule(folderId, {
87
+ name: ruleName,
88
+ isEnabled: true,
89
+ actions: actionsArray
90
+ });
91
+ }
92
+ async createRandomComplexRule(folderId, ruleName, numOfConditions, numOfActions, ruleDescription) {
93
+ if (numOfConditions > ConditionsTypes.conditions.length) {
94
+ numOfConditions = ConditionsTypes.conditions.length;
95
+ }
96
+ const conditionsArray = [];
97
+ for (let i = 0; i < numOfConditions; i++) {
98
+ const randomIndex = crypto.randomInt(0, ConditionsTypes.conditions.length);
99
+ const randomCondition = ConditionsTypes.conditions[randomIndex];
100
+ conditionsArray.push(randomCondition);
101
+ }
102
+ if (numOfActions > ActionTypes.actions.length) {
103
+ numOfActions = ActionTypes.actions.length;
104
+ }
105
+ const actionsArray = [];
106
+ for (let i = 0; i < numOfActions; i++) {
107
+ const randomIndex = crypto.randomInt(0, ActionTypes.actions.length);
108
+ const randomAction = ActionTypes.actions[randomIndex];
109
+ actionsArray.push(randomAction);
110
+ }
111
+ return this.createRule(folderId, {
112
+ name: ruleName,
113
+ description: ruleDescription,
114
+ isEnabled: true,
115
+ actions: actionsArray,
116
+ conditions: {
117
+ inverted: false,
118
+ booleanMode: 'and',
119
+ compositeConditions: conditionsArray
120
+ }
121
+ });
122
+ }
123
+ async createRuleWithRandomAspects(folderId, ruleName) {
124
+ return this.createRule(folderId, {
125
+ name: ruleName,
126
+ isEnabled: true,
127
+ actions: [
128
+ {
129
+ actionDefinitionId: 'add-features',
130
+ params: {
131
+ 'aspect-name': 'sc:controlsAreClearance'
132
+ }
133
+ },
134
+ {
135
+ actionDefinitionId: 'add-features',
136
+ params: {
137
+ 'aspect-name': 'sfdc:objectModel'
138
+ }
139
+ },
140
+ {
141
+ actionDefinitionId: 'add-features',
142
+ params: {
143
+ 'aspect-name': 'sfdc:folder'
144
+ }
145
+ }
146
+ ]
147
+ });
148
+ }
149
+ async createRuleWithDestinationFolder(folderId, ruleName, actionType, destinationFolderId) {
150
+ return this.createRule(folderId, {
151
+ name: ruleName,
152
+ isEnabled: true,
153
+ actions: [
154
+ {
155
+ actionDefinitionId: actionType,
156
+ params: {
157
+ 'destination-folder': destinationFolderId
158
+ }
159
+ }
160
+ ]
161
+ });
162
+ }
163
+ }
164
+ export class ActionTypes {
165
+ constructor(key, value) {
166
+ this.key = key;
167
+ this.value = value;
168
+ }
169
+ }
170
+ ActionTypes.ADDFEATURES = new ActionTypes('ADDFEATURES', {
171
+ actionDefinitionId: 'add-features',
172
+ params: { 'aspect-name': 'cm:thumbnailed' }
173
+ });
174
+ ActionTypes.CHECKIN = new ActionTypes('CHECKIN', {
175
+ actionDefinitionId: 'check-in',
176
+ params: {
177
+ description: 'test',
178
+ minorChange: true
179
+ }
180
+ });
181
+ ActionTypes.SPECIALISETYPE = new ActionTypes('SPECIALISETYPE', {
182
+ actionDefinitionId: 'specialise-type',
183
+ params: { 'type-name': 'sys:base' }
184
+ });
185
+ ActionTypes.RECORDABLEVERSION = new ActionTypes('RECORDABLEVERSION', {
186
+ actionDefinitionId: 'recordable-version-config',
187
+ params: { version: 'ALL' }
188
+ });
189
+ ActionTypes.SETPROPERTYVALUE = new ActionTypes('SETPROPERTYVALUE', {
190
+ actionDefinitionId: 'set-property-value',
191
+ params: { property: 'dl:ganttPercentComplete', value: 'test' }
192
+ });
193
+ ActionTypes.actions = [
194
+ ActionTypes.ADDFEATURES.value,
195
+ ActionTypes.CHECKIN.value,
196
+ ActionTypes.RECORDABLEVERSION.value,
197
+ ActionTypes.SPECIALISETYPE.value,
198
+ ActionTypes.SETPROPERTYVALUE.value
199
+ ];
200
+ export class ConditionsTypes {
201
+ constructor(key, value) {
202
+ this.key = key;
203
+ this.value = value;
204
+ }
205
+ }
206
+ ConditionsTypes.MIMETYPE = new ConditionsTypes('MIMETYPE', {
207
+ inverted: false,
208
+ booleanMode: 'and',
209
+ simpleConditions: [
210
+ {
211
+ field: 'mimetype',
212
+ comparator: 'equals',
213
+ parameter: 'video/3gpp'
214
+ }
215
+ ]
216
+ });
217
+ ConditionsTypes.CMNAME = new ConditionsTypes('CM:NAME', {
218
+ inverted: false,
219
+ booleanMode: 'and',
220
+ simpleConditions: [
221
+ {
222
+ field: 'cm:name',
223
+ comparator: 'equals',
224
+ parameter: 'testname'
225
+ }
226
+ ]
227
+ });
228
+ ConditionsTypes.SIZE = new ConditionsTypes('SIZE', {
229
+ inverted: false,
230
+ booleanMode: 'and',
231
+ simpleConditions: [
232
+ {
233
+ field: 'size',
234
+ comparator: 'equals',
235
+ parameter: '345'
236
+ }
237
+ ]
238
+ });
239
+ ConditionsTypes.TAG = new ConditionsTypes('TAG', {
240
+ inverted: false,
241
+ booleanMode: 'and',
242
+ simpleConditions: [
243
+ {
244
+ field: 'tag',
245
+ comparator: 'equals',
246
+ parameter: 'testtag'
247
+ }
248
+ ]
249
+ });
250
+ ConditionsTypes.conditions = [ConditionsTypes.MIMETYPE.value, ConditionsTypes.CMNAME.value, ConditionsTypes.SIZE.value, ConditionsTypes.TAG.value];
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZXMtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLXBsYXl3cmlnaHQtc2hhcmVkL3NyYy9hcGkvcnVsZXMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsTUFBTSxPQUFPLFFBQVE7SUFHbkI7UUFDRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxRQUFpQjtRQUN6RCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBWSxFQUFFLFVBQWtCLEVBQUUsT0FBZSxFQUFFO1FBQ2pFLG1GQUFtRjtRQUNuRixNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFjLEVBQUUsSUFBbUIsRUFBRSxZQUFvQixXQUFXO1FB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SztJQUNmLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLGdCQUFnQixFQUFFO1FBQ2hCO1lBQ0UsS0FBSyxFQUFFLEtBQUs7WUFDWixVQUFVLEVBQUUsUUFBUTtZQUNwQixTQUFTLEVBQUUsU0FBUztTQUNyQjtLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBQ2EsMEJBQVUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgQXBpQ2xpZW50RmFjdG9yeSB9IGZyb20gJy4vYXBpLWNsaWVudC1mYWN0b3J5JztcbmltcG9ydCB7IEFjYUZvbGRlclJ1bGVzTW9kdWxlIH0gZnJvbSAnQGFsZnJlc2NvL2FjYS1jb250ZW50L2ZvbGRlci1ydWxlcyc7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuZXhwb3J0IGNsYXNzIFJ1bGVzQXBpIHtcbiAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBcGlDbGllbnRGYWN0b3J5O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYXBpU2VydmljZSA9IG5ldyBBcGlDbGllbnRGYWN0b3J5KCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgaW5pdGlhbGl6ZSh1c2VyTmFtZTogc3RyaW5nLCBwYXNzd29yZD86IHN0cmluZyk6IFByb21pc2U8UnVsZXNBcGk+IHtcbiAgICBjb25zdCBjbGFzc09iaiA9IG5ldyBSdWxlc0FwaSgpO1xuICAgIGF3YWl0IGNsYXNzT2JqLmFwaVNlcnZpY2Uuc2V0VXBBY2FCYWNrZW5kKHVzZXJOYW1lLCBwYXNzd29yZCk7XG4gICAgcmV0dXJuIGNsYXNzT2JqO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxsQXBpKHBhdGg6IHN0cmluZywgaHR0cE1ldGhvZDogc3RyaW5nLCBib2R5OiBvYmplY3QgPSB7fSk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gQVBJcyB1c2VkIGJ5IHRoaXMgc2VydmljZSBhcmUgc3RpbGwgcHJpdmF0ZSBhbmQgbm90IHlldCBhdmFpbGFibGUgZm9yIHB1YmxpYyB1c2VcbiAgICBjb25zdCBwYXJhbXMgPSBbe30sIHt9LCB7fSwge30sIGJvZHksIFsnYXBwbGljYXRpb24vanNvbiddLCBbJ2FwcGxpY2F0aW9uL2pzb24nXV07XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5hbGZyZXNjb0FwaS5jb250ZW50UHJpdmF0ZUNsaWVudC5jYWxsQXBpKHBhdGgsIGh0dHBNZXRob2QsIC4uLnBhcmFtcyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVSdWxlKG5vZGVJZDogc3RyaW5nLCBydWxlOiBQYXJ0aWFsPFJ1bGU+LCBydWxlU2V0SWQ6IHN0cmluZyA9ICctZGVmYXVsdC0nKTogUHJvbWlzZTxSdWxlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNhbGxBcGkoYC9ub2Rlcy8ke25vZGVJZH0vcnVsZS1zZXRzLyR7cnVsZVNldElkfS9ydWxlc2AsICdQT1NUJywgeyAuLi5ydWxlIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5lbnRyeTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVJhbmRvbVJ1bGUoZm9sZGVySWQ6IHN0cmluZywgcnVsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8UnVsZT4ge1xuICAgIGNvbnN0IHJhbmRvbUFjdGlvbnNJbmRleCA9IGNyeXB0by5yYW5kb21JbnQoMCwgQWN0aW9uVHlwZXMuYWN0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IHJhbmRvbUFjdGlvbiA9IEFjdGlvblR5cGVzLmFjdGlvbnNbcmFuZG9tQWN0aW9uc0luZGV4XTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSdWxlKGZvbGRlcklkLCB7XG4gICAgICBuYW1lOiBydWxlTmFtZSxcbiAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbnM6IFtyYW5kb21BY3Rpb25dXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVSYW5kb21SdWxlV2l0aE11bHRpcGxlQ29uZGl0aW9ucyhmb2xkZXJJZDogc3RyaW5nLCBydWxlTmFtZTogc3RyaW5nLCBudW1PZkNvbmRpdGlvbnM6IG51bWJlcik6IFByb21pc2U8UnVsZT4ge1xuICAgIGlmIChudW1PZkNvbmRpdGlvbnMgPiBDb25kaXRpb25zVHlwZXMuY29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIG51bU9mQ29uZGl0aW9ucyA9IENvbmRpdGlvbnNUeXBlcy5jb25kaXRpb25zLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgcmFuZG9tQWN0aW9uc0luZGV4ID0gY3J5cHRvLnJhbmRvbUludCgwLCBBY3Rpb25UeXBlcy5hY3Rpb25zLmxlbmd0aCk7XG4gICAgY29uc3QgcmFuZG9tQWN0aW9uID0gQWN0aW9uVHlwZXMuYWN0aW9uc1tyYW5kb21BY3Rpb25zSW5kZXhdO1xuICAgIGNvbnN0IGNvbmRpdGlvbnNBcnJheSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb25kaXRpb25zOyBpKyspIHtcbiAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gY3J5cHRvLnJhbmRvbUludCgwLCBDb25kaXRpb25zVHlwZXMuY29uZGl0aW9ucy5sZW5ndGgpO1xuICAgICAgY29uc3QgcmFuZG9tQ29uZGl0aW9uID0gQ29uZGl0aW9uc1R5cGVzLmNvbmRpdGlvbnNbcmFuZG9tSW5kZXhdO1xuICAgICAgY29uZGl0aW9uc0FycmF5LnB1c2gocmFuZG9tQ29uZGl0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUnVsZShmb2xkZXJJZCwge1xuICAgICAgbmFtZTogcnVsZU5hbWUsXG4gICAgICBpc0VuYWJsZWQ6IHRydWUsXG4gICAgICBhY3Rpb25zOiBbcmFuZG9tQWN0aW9uXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgaW52ZXJ0ZWQ6IGZhbHNlLFxuICAgICAgICBib29sZWFuTW9kZTogJ2FuZCcsXG4gICAgICAgIGNvbXBvc2l0ZUNvbmRpdGlvbnM6IGNvbmRpdGlvbnNBcnJheVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUmFuZG9tUnVsZVdpdGhNdWx0aXBsZUFjdGlvbnMoZm9sZGVySWQ6IHN0cmluZywgcnVsZU5hbWU6IHN0cmluZywgbnVtT2ZBY3Rpb25zOiBudW1iZXIpOiBQcm9taXNlPFJ1bGU+IHtcbiAgICBpZiAobnVtT2ZBY3Rpb25zID4gQWN0aW9uVHlwZXMuYWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIG51bU9mQWN0aW9ucyA9IEFjdGlvblR5cGVzLmFjdGlvbnMubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBhY3Rpb25zQXJyYXkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU9mQWN0aW9uczsgaSsrKSB7XG4gICAgICBjb25zdCByYW5kb21JbmRleCA9IGNyeXB0by5yYW5kb21JbnQoMCwgQWN0aW9uVHlwZXMuYWN0aW9ucy5sZW5ndGgpO1xuICAgICAgY29uc3QgcmFuZG9tQWN0aW9uID0gQWN0aW9uVHlwZXMuYWN0aW9uc1tyYW5kb21JbmRleF07XG4gICAgICBhY3Rpb25zQXJyYXkucHVzaChyYW5kb21BY3Rpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSdWxlKGZvbGRlcklkLCB7XG4gICAgICBuYW1lOiBydWxlTmFtZSxcbiAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbnM6IGFjdGlvbnNBcnJheVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUmFuZG9tQ29tcGxleFJ1bGUoXG4gICAgZm9sZGVySWQ6IHN0cmluZyxcbiAgICBydWxlTmFtZTogc3RyaW5nLFxuICAgIG51bU9mQ29uZGl0aW9uczogbnVtYmVyLFxuICAgIG51bU9mQWN0aW9uczogbnVtYmVyLFxuICAgIHJ1bGVEZXNjcmlwdGlvbj86IHN0cmluZ1xuICApOiBQcm9taXNlPFJ1bGU+IHtcbiAgICBpZiAobnVtT2ZDb25kaXRpb25zID4gQ29uZGl0aW9uc1R5cGVzLmNvbmRpdGlvbnMubGVuZ3RoKSB7XG4gICAgICBudW1PZkNvbmRpdGlvbnMgPSBDb25kaXRpb25zVHlwZXMuY29uZGl0aW9ucy5sZW5ndGg7XG4gICAgfVxuICAgIGNvbnN0IGNvbmRpdGlvbnNBcnJheSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb25kaXRpb25zOyBpKyspIHtcbiAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gY3J5cHRvLnJhbmRvbUludCgwLCBDb25kaXRpb25zVHlwZXMuY29uZGl0aW9ucy5sZW5ndGgpO1xuICAgICAgY29uc3QgcmFuZG9tQ29uZGl0aW9uID0gQ29uZGl0aW9uc1R5cGVzLmNvbmRpdGlvbnNbcmFuZG9tSW5kZXhdO1xuICAgICAgY29uZGl0aW9uc0FycmF5LnB1c2gocmFuZG9tQ29uZGl0aW9uKTtcbiAgICB9XG4gICAgaWYgKG51bU9mQWN0aW9ucyA+IEFjdGlvblR5cGVzLmFjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBudW1PZkFjdGlvbnMgPSBBY3Rpb25UeXBlcy5hY3Rpb25zLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgYWN0aW9uc0FycmF5ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1PZkFjdGlvbnM7IGkrKykge1xuICAgICAgY29uc3QgcmFuZG9tSW5kZXggPSBjcnlwdG8ucmFuZG9tSW50KDAsIEFjdGlvblR5cGVzLmFjdGlvbnMubGVuZ3RoKTtcbiAgICAgIGNvbnN0IHJhbmRvbUFjdGlvbiA9IEFjdGlvblR5cGVzLmFjdGlvbnNbcmFuZG9tSW5kZXhdO1xuICAgICAgYWN0aW9uc0FycmF5LnB1c2gocmFuZG9tQWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUnVsZShmb2xkZXJJZCwge1xuICAgICAgbmFtZTogcnVsZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcnVsZURlc2NyaXB0aW9uLFxuICAgICAgaXNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uczogYWN0aW9uc0FycmF5LFxuICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICBpbnZlcnRlZDogZmFsc2UsXG4gICAgICAgIGJvb2xlYW5Nb2RlOiAnYW5kJyxcbiAgICAgICAgY29tcG9zaXRlQ29uZGl0aW9uczogY29uZGl0aW9uc0FycmF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVSdWxlV2l0aFJhbmRvbUFzcGVjdHMoZm9sZGVySWQ6IHN0cmluZywgcnVsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8UnVsZT4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJ1bGUoZm9sZGVySWQsIHtcbiAgICAgIG5hbWU6IHJ1bGVOYW1lLFxuICAgICAgaXNFbmFibGVkOiB0cnVlLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uRGVmaW5pdGlvbklkOiAnYWRkLWZlYXR1cmVzJyxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICdhc3BlY3QtbmFtZSc6ICdzYzpjb250cm9sc0FyZUNsZWFyYW5jZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb25EZWZpbml0aW9uSWQ6ICdhZGQtZmVhdHVyZXMnLFxuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgJ2FzcGVjdC1uYW1lJzogJ3NmZGM6b2JqZWN0TW9kZWwnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uRGVmaW5pdGlvbklkOiAnYWRkLWZlYXR1cmVzJyxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICdhc3BlY3QtbmFtZSc6ICdzZmRjOmZvbGRlcidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVJ1bGVXaXRoRGVzdGluYXRpb25Gb2xkZXIoXG4gICAgZm9sZGVySWQ6IHN0cmluZyxcbiAgICBydWxlTmFtZTogc3RyaW5nLFxuICAgIGFjdGlvblR5cGU6ICdtb3ZlJyB8ICdjb3B5JyB8ICdpbXBvcnQnLFxuICAgIGRlc3RpbmF0aW9uRm9sZGVySWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFJ1bGU+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSdWxlKGZvbGRlcklkLCB7XG4gICAgICBuYW1lOiBydWxlTmFtZSxcbiAgICAgIGlzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFjdGlvbkRlZmluaXRpb25JZDogYWN0aW9uVHlwZSxcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICdkZXN0aW5hdGlvbi1mb2xkZXInOiBkZXN0aW5hdGlvbkZvbGRlcklkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG4gIH1cbn1cblxudHlwZSBSdWxlVHJpZ2dlciA9ICdpbmJvdW5kJyB8ICd1cGRhdGUnIHwgJ291dGJvdW5kJztcblxuZXhwb3J0IGludGVyZmFjZSBSdWxlIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBpc0VuYWJsZWQ6IGJvb2xlYW47XG4gIGlzSW5oZXJpdGFibGU6IGJvb2xlYW47XG4gIGlzQXN5bmNocm9ub3VzOiBib29sZWFuO1xuICBlcnJvclNjcmlwdDogc3RyaW5nO1xuICBpc1NoYXJlZDogYm9vbGVhbjtcbiAgdHJpZ2dlcnM6IFJ1bGVUcmlnZ2VyW107XG4gIGNvbmRpdGlvbnM6IEFjYUZvbGRlclJ1bGVzTW9kdWxlO1xuICBhY3Rpb25zOiBSdWxlQWN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUFjdGlvbiB7XG4gIGFjdGlvbkRlZmluaXRpb25JZDogc3RyaW5nO1xuICBwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblR5cGVzIHtcbiAgc3RhdGljIHJlYWRvbmx5IEFEREZFQVRVUkVTID0gbmV3IEFjdGlvblR5cGVzKCdBRERGRUFUVVJFUycsIHtcbiAgICBhY3Rpb25EZWZpbml0aW9uSWQ6ICdhZGQtZmVhdHVyZXMnLFxuICAgIHBhcmFtczogeyAnYXNwZWN0LW5hbWUnOiAnY206dGh1bWJuYWlsZWQnIH1cbiAgfSk7XG4gIHN0YXRpYyByZWFkb25seSBDSEVDS0lOID0gbmV3IEFjdGlvblR5cGVzKCdDSEVDS0lOJywge1xuICAgIGFjdGlvbkRlZmluaXRpb25JZDogJ2NoZWNrLWluJyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAndGVzdCcsXG4gICAgICBtaW5vckNoYW5nZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIHN0YXRpYyByZWFkb25seSBTUEVDSUFMSVNFVFlQRSA9IG5ldyBBY3Rpb25UeXBlcygnU1BFQ0lBTElTRVRZUEUnLCB7XG4gICAgYWN0aW9uRGVmaW5pdGlvbklkOiAnc3BlY2lhbGlzZS10eXBlJyxcbiAgICBwYXJhbXM6IHsgJ3R5cGUtbmFtZSc6ICdzeXM6YmFzZScgfVxuICB9KTtcbiAgc3RhdGljIHJlYWRvbmx5IFJFQ09SREFCTEVWRVJTSU9OID0gbmV3IEFjdGlvblR5cGVzKCdSRUNPUkRBQkxFVkVSU0lPTicsIHtcbiAgICBhY3Rpb25EZWZpbml0aW9uSWQ6ICdyZWNvcmRhYmxlLXZlcnNpb24tY29uZmlnJyxcbiAgICBwYXJhbXM6IHsgdmVyc2lvbjogJ0FMTCcgfVxuICB9KTtcbiAgc3RhdGljIHJlYWRvbmx5IFNFVFBST1BFUlRZVkFMVUUgPSBuZXcgQWN0aW9uVHlwZXMoJ1NFVFBST1BFUlRZVkFMVUUnLCB7XG4gICAgYWN0aW9uRGVmaW5pdGlvbklkOiAnc2V0LXByb3BlcnR5LXZhbHVlJyxcbiAgICBwYXJhbXM6IHsgcHJvcGVydHk6ICdkbDpnYW50dFBlcmNlbnRDb21wbGV0ZScsIHZhbHVlOiAndGVzdCcgfVxuICB9KTtcbiAgc3RhdGljIHJlYWRvbmx5IGFjdGlvbnMgPSBbXG4gICAgQWN0aW9uVHlwZXMuQURERkVBVFVSRVMudmFsdWUsXG4gICAgQWN0aW9uVHlwZXMuQ0hFQ0tJTi52YWx1ZSxcbiAgICBBY3Rpb25UeXBlcy5SRUNPUkRBQkxFVkVSU0lPTi52YWx1ZSxcbiAgICBBY3Rpb25UeXBlcy5TUEVDSUFMSVNFVFlQRS52YWx1ZSxcbiAgICBBY3Rpb25UeXBlcy5TRVRQUk9QRVJUWVZBTFVFLnZhbHVlXG4gIF07XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBrZXk6IHN0cmluZywgcHVibGljIHZhbHVlOiBSdWxlQWN0aW9uKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uc1R5cGVzIHtcbiAgc3RhdGljIHJlYWRvbmx5IE1JTUVUWVBFID0gbmV3IENvbmRpdGlvbnNUeXBlcygnTUlNRVRZUEUnLCB7XG4gICAgaW52ZXJ0ZWQ6IGZhbHNlLFxuICAgIGJvb2xlYW5Nb2RlOiAnYW5kJyxcbiAgICBzaW1wbGVDb25kaXRpb25zOiBbXG4gICAgICB7XG4gICAgICAgIGZpZWxkOiAnbWltZXR5cGUnLFxuICAgICAgICBjb21wYXJhdG9yOiAnZXF1YWxzJyxcbiAgICAgICAgcGFyYW1ldGVyOiAndmlkZW8vM2dwcCdcbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuICBzdGF0aWMgcmVhZG9ubHkgQ01OQU1FID0gbmV3IENvbmRpdGlvbnNUeXBlcygnQ006TkFNRScsIHtcbiAgICBpbnZlcnRlZDogZmFsc2UsXG4gICAgYm9vbGVhbk1vZGU6ICdhbmQnLFxuICAgIHNpbXBsZUNvbmRpdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZmllbGQ6ICdjbTpuYW1lJyxcbiAgICAgICAgY29tcGFyYXRvcjogJ2VxdWFscycsXG4gICAgICAgIHBhcmFtZXRlcjogJ3Rlc3RuYW1lJ1xuICAgICAgfVxuICAgIF1cbiAgfSk7XG4gIHN0YXRpYyByZWFkb25seSBTSVpFID0gbmV3IENvbmRpdGlvbnNUeXBlcygnU0laRScsIHtcbiAgICBpbnZlcnRlZDogZmFsc2UsXG4gICAgYm9vbGVhbk1vZGU6ICdhbmQnLFxuICAgIHNpbXBsZUNvbmRpdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgZmllbGQ6ICdzaXplJyxcbiAgICAgICAgY29tcGFyYXRvcjogJ2VxdWFscycsXG4gICAgICAgIHBhcmFtZXRlcjogJzM0NSdcbiAgICAgIH1cbiAgICBdXG4gIH0pO1xuICBzdGF0aWMgcmVhZG9ubHkgVEFHID0gbmV3IENvbmRpdGlvbnNUeXBlcygnVEFHJywge1xuICAgIGludmVydGVkOiBmYWxzZSxcbiAgICBib29sZWFuTW9kZTogJ2FuZCcsXG4gICAgc2ltcGxlQ29uZGl0aW9uczogW1xuICAgICAge1xuICAgICAgICBmaWVsZDogJ3RhZycsXG4gICAgICAgIGNvbXBhcmF0b3I6ICdlcXVhbHMnLFxuICAgICAgICBwYXJhbWV0ZXI6ICd0ZXN0dGFnJ1xuICAgICAgfVxuICAgIF1cbiAgfSk7XG4gIHN0YXRpYyByZWFkb25seSBjb25kaXRpb25zID0gW0NvbmRpdGlvbnNUeXBlcy5NSU1FVFlQRS52YWx1ZSwgQ29uZGl0aW9uc1R5cGVzLkNNTkFNRS52YWx1ZSwgQ29uZGl0aW9uc1R5cGVzLlNJWkUudmFsdWUsIENvbmRpdGlvbnNUeXBlcy5UQUcudmFsdWVdO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMga2V5OiBzdHJpbmcsIHB1YmxpYyB2YWx1ZTogQWNhRm9sZGVyUnVsZXNNb2R1bGUpIHt9XG59XG4iXX0=
@@ -0,0 +1,74 @@
1
+ /*!
2
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
3
+ *
4
+ * Alfresco Example Content Application
5
+ *
6
+ * This file is part of the Alfresco Example Content Application.
7
+ * If the software was purchased under a paid Alfresco license, the terms of
8
+ * the paid license agreement will prevail. Otherwise, the software is
9
+ * provided under the following open source license terms:
10
+ *
11
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
+ * it under the terms of the GNU Lesser General Public License as published by
13
+ * the Free Software Foundation, either version 3 of the License, or
14
+ * (at your option) any later version.
15
+ *
16
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Lesser General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Lesser General Public License
22
+ * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
+ */
24
+ import { ApiClientFactory } from './api-client-factory';
25
+ import { Utils } from '../utils';
26
+ import { ResultSetPaging } from '@alfresco/js-api';
27
+ export class SearchPageApi {
28
+ constructor() {
29
+ this.apiService = new ApiClientFactory();
30
+ }
31
+ static async initialize(userName, password) {
32
+ const classObj = new SearchPageApi();
33
+ await classObj.apiService.setUpAcaBackend(userName, password);
34
+ return classObj;
35
+ }
36
+ async querySearchFiles(username) {
37
+ const data = {
38
+ query: {
39
+ query: '*',
40
+ language: 'afts'
41
+ },
42
+ filterQueries: [
43
+ { query: `cm:modified:[NOW/DAY-30DAYS TO NOW/DAY+1DAY]` },
44
+ { query: `cm:modifier:${username} OR cm:creator:${username}` },
45
+ { query: `TYPE:"content" AND -TYPE:"app:filelink" AND -TYPE:"fm:post"` }
46
+ ]
47
+ };
48
+ try {
49
+ return this.apiService.search.search(data);
50
+ }
51
+ catch {
52
+ return new ResultSetPaging();
53
+ }
54
+ }
55
+ async getTotalItems(username) {
56
+ return (await this.querySearchFiles(username)).list.pagination.totalItems;
57
+ }
58
+ async waitForApi(username, data) {
59
+ try {
60
+ const searchFiles = async () => {
61
+ const totalItems = await this.getTotalItems(username);
62
+ if (totalItems !== data.expect) {
63
+ return Promise.reject(totalItems);
64
+ }
65
+ else {
66
+ return Promise.resolve(totalItems);
67
+ }
68
+ };
69
+ return Utils.retryCall(searchFiles);
70
+ }
71
+ catch { }
72
+ }
73
+ }
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1wbGF5d3JpZ2h0LXNoYXJlZC9zcmMvYXBpL3NlYXJjaC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRCxNQUFNLE9BQU8sYUFBYTtJQUd4QjtRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFnQixFQUFFLFFBQWlCO1FBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDckMsTUFBTSxRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUM3QyxNQUFNLElBQUksR0FBRztZQUNYLEtBQUssRUFBRTtnQkFDTCxLQUFLLEVBQUUsR0FBRztnQkFDVixRQUFRLEVBQUUsTUFBTTthQUNqQjtZQUNELGFBQWEsRUFBRTtnQkFDYixFQUFFLEtBQUssRUFBRSw4Q0FBOEMsRUFBRTtnQkFDekQsRUFBRSxLQUFLLEVBQUUsZUFBZSxRQUFRLGtCQUFrQixRQUFRLEVBQUUsRUFBRTtnQkFDOUQsRUFBRSxLQUFLLEVBQUUsNkRBQTZELEVBQUU7YUFDekU7U0FDRixDQUFDO1FBRUYsSUFBSTtZQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVDO1FBQUMsTUFBTTtZQUNOLE9BQU8sSUFBSSxlQUFlLEVBQUUsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWdCO1FBQ2xDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQzVFLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWdCLEVBQUUsSUFBd0I7UUFDekQsSUFBSTtZQUNGLE1BQU0sV0FBVyxHQUFHLEtBQUssSUFBSSxFQUFFO2dCQUM3QixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RELElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQzlCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDbkM7cUJBQU07b0JBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNwQztZQUNILENBQUMsQ0FBQztZQUVGLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNyQztRQUFDLE1BQU0sR0FBRTtJQUNaLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNCBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5pbXBvcnQgeyBBcGlDbGllbnRGYWN0b3J5IH0gZnJvbSAnLi9hcGktY2xpZW50LWZhY3RvcnknO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBSZXN1bHRTZXRQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcblxuZXhwb3J0IGNsYXNzIFNlYXJjaFBhZ2VBcGkge1xuICBwcml2YXRlIGFwaVNlcnZpY2U6IEFwaUNsaWVudEZhY3Rvcnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hcGlTZXJ2aWNlID0gbmV3IEFwaUNsaWVudEZhY3RvcnkoKTtcbiAgfVxuICBzdGF0aWMgYXN5bmMgaW5pdGlhbGl6ZSh1c2VyTmFtZTogc3RyaW5nLCBwYXNzd29yZD86IHN0cmluZyk6IFByb21pc2U8U2VhcmNoUGFnZUFwaT4ge1xuICAgIGNvbnN0IGNsYXNzT2JqID0gbmV3IFNlYXJjaFBhZ2VBcGkoKTtcbiAgICBhd2FpdCBjbGFzc09iai5hcGlTZXJ2aWNlLnNldFVwQWNhQmFja2VuZCh1c2VyTmFtZSwgcGFzc3dvcmQpO1xuICAgIHJldHVybiBjbGFzc09iajtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcXVlcnlTZWFyY2hGaWxlcyh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXN1bHRTZXRQYWdpbmc+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgcXVlcnk6ICcqJyxcbiAgICAgICAgbGFuZ3VhZ2U6ICdhZnRzJ1xuICAgICAgfSxcbiAgICAgIGZpbHRlclF1ZXJpZXM6IFtcbiAgICAgICAgeyBxdWVyeTogYGNtOm1vZGlmaWVkOltOT1cvREFZLTMwREFZUyBUTyBOT1cvREFZKzFEQVldYCB9LFxuICAgICAgICB7IHF1ZXJ5OiBgY206bW9kaWZpZXI6JHt1c2VybmFtZX0gT1IgY206Y3JlYXRvcjoke3VzZXJuYW1lfWAgfSxcbiAgICAgICAgeyBxdWVyeTogYFRZUEU6XCJjb250ZW50XCIgQU5EIC1UWVBFOlwiYXBwOmZpbGVsaW5rXCIgQU5EIC1UWVBFOlwiZm06cG9zdFwiYCB9XG4gICAgICBdXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnNlYXJjaC5zZWFyY2goZGF0YSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbmV3IFJlc3VsdFNldFBhZ2luZygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFRvdGFsSXRlbXModXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnF1ZXJ5U2VhcmNoRmlsZXModXNlcm5hbWUpKS5saXN0LnBhZ2luYXRpb24udG90YWxJdGVtcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JBcGkodXNlcm5hbWU6IHN0cmluZywgZGF0YTogeyBleHBlY3Q6IG51bWJlciB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNlYXJjaEZpbGVzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbEl0ZW1zID0gYXdhaXQgdGhpcy5nZXRUb3RhbEl0ZW1zKHVzZXJuYW1lKTtcbiAgICAgICAgaWYgKHRvdGFsSXRlbXMgIT09IGRhdGEuZXhwZWN0KSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRvdGFsSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodG90YWxJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBVdGlscy5yZXRyeUNhbGwoc2VhcmNoRmlsZXMpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxufVxuIl19
@@ -0,0 +1,136 @@
1
+ /*!
2
+ * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved.
3
+ *
4
+ * Alfresco Example Content Application
5
+ *
6
+ * This file is part of the Alfresco Example Content Application.
7
+ * If the software was purchased under a paid Alfresco license, the terms of
8
+ * the paid license agreement will prevail. Otherwise, the software is
9
+ * provided under the following open source license terms:
10
+ *
11
+ * The Alfresco Example Content Application is free software: you can redistribute it and/or modify
12
+ * it under the terms of the GNU Lesser General Public License as published by
13
+ * the Free Software Foundation, either version 3 of the License, or
14
+ * (at your option) any later version.
15
+ *
16
+ * The Alfresco Example Content Application is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU Lesser General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU Lesser General Public License
22
+ * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
+ */
24
+ import { ApiClientFactory } from './api-client-factory';
25
+ import { SharedLinkPaging } from '@alfresco/js-api';
26
+ import { Utils } from '../utils';
27
+ export class SharedLinksApi {
28
+ constructor() {
29
+ this.apiService = new ApiClientFactory();
30
+ }
31
+ static async initialize(userName, password) {
32
+ const classObj = new SharedLinksApi();
33
+ await classObj.apiService.setUpAcaBackend(userName, password);
34
+ return classObj;
35
+ }
36
+ async shareFileById(id, expireDate) {
37
+ try {
38
+ const data = {
39
+ nodeId: id,
40
+ expiresAt: expireDate
41
+ };
42
+ return this.apiService.share.createSharedLink(data);
43
+ }
44
+ catch (error) {
45
+ return null;
46
+ }
47
+ }
48
+ async shareFilesByIds(ids, expireDate) {
49
+ const sharedLinks = [];
50
+ try {
51
+ if (ids && ids.length > 0) {
52
+ for (const id of ids) {
53
+ const sharedLink = await this.shareFileById(id, expireDate);
54
+ sharedLinks.push(sharedLink);
55
+ }
56
+ }
57
+ }
58
+ catch (error) {
59
+ console.error(`SharedLinksApi shareFilesByIds : catch : `, error);
60
+ }
61
+ return sharedLinks;
62
+ }
63
+ async getSharedLinks(maxItems = 250) {
64
+ try {
65
+ const opts = {
66
+ maxItems
67
+ };
68
+ return this.apiService.share.listSharedLinks(opts);
69
+ }
70
+ catch (error) {
71
+ console.error(`SharedLinksApi getSharedLinks : catch : `, error);
72
+ return new SharedLinkPaging();
73
+ }
74
+ }
75
+ async waitForFilesToBeShared(filesIds) {
76
+ try {
77
+ const sharedFile = async () => {
78
+ const sharedFiles = (await this.getSharedLinks()).list.entries.map((link) => link.entry.nodeId);
79
+ const foundItems = filesIds.every((id) => sharedFiles.includes(id));
80
+ if (foundItems) {
81
+ return Promise.resolve(foundItems);
82
+ }
83
+ else {
84
+ return Promise.reject(foundItems);
85
+ }
86
+ };
87
+ return Utils.retryCall(sharedFile);
88
+ }
89
+ catch (error) {
90
+ console.error(`SharedLinksApi waitForFilesToBeShared : catch : ${error}`);
91
+ console.error(`\tWait timeout reached waiting for files to be shared`);
92
+ }
93
+ }
94
+ async getSharedIdOfNode(fileId) {
95
+ try {
96
+ const sharedLinksEntries = (await this.getSharedLinks())?.list.entries;
97
+ const found = sharedLinksEntries.find((sharedLink) => sharedLink.entry.nodeId === fileId);
98
+ return found?.entry.id;
99
+ }
100
+ catch (error) {
101
+ console.error(`SharedLinksApi getSharedIdOfNode : catch : `, error);
102
+ return null;
103
+ }
104
+ }
105
+ async unshareFileById(fileId) {
106
+ try {
107
+ const sharedId = await this.getSharedIdOfNode(fileId);
108
+ return this.apiService.share.deleteSharedLink(sharedId);
109
+ }
110
+ catch (error) {
111
+ console.error(`SharedLinksApi unshareFileById : catch : `, error);
112
+ }
113
+ }
114
+ async waitForFilesToNotBeShared(filesIds) {
115
+ try {
116
+ const sharedFile = async () => {
117
+ const sharedFiles = (await this.getSharedLinks()).list.entries.map((link) => link.entry.nodeId);
118
+ const foundItems = filesIds.some((id) => {
119
+ return sharedFiles.includes(id);
120
+ });
121
+ if (foundItems) {
122
+ return Promise.reject(foundItems);
123
+ }
124
+ else {
125
+ return Promise.resolve(foundItems);
126
+ }
127
+ };
128
+ return Utils.retryCall(sharedFile);
129
+ }
130
+ catch (error) {
131
+ console.error(`SharedLinksApi waitForFilesToNotBeShared : catch : ${error}`);
132
+ console.error(`\tWait timeout reached waiting for files to no longer be shared`);
133
+ }
134
+ }
135
+ }
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWxpbmtzLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1wbGF5d3JpZ2h0LXNoYXJlZC9zcmMvYXBpL3NoYXJlZC1saW5rcy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVqQyxNQUFNLE9BQU8sY0FBYztJQUd6QjtRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFnQixFQUFFLFFBQWlCO1FBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDdEMsTUFBTSxRQUFRLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBVSxFQUFFLFVBQWlCO1FBQy9DLElBQUk7WUFDRixNQUFNLElBQUksR0FBRztnQkFDWCxNQUFNLEVBQUUsRUFBRTtnQkFDVixTQUFTLEVBQUUsVUFBVTthQUN0QixDQUFDO1lBQ0YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyRDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQWEsRUFBRSxVQUFp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biAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjQgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgQXBpQ2xpZW50RmFjdG9yeSB9IGZyb20gJy4vYXBpLWNsaWVudC1mYWN0b3J5JztcbmltcG9ydCB7IFNoYXJlZExpbmtFbnRyeSwgU2hhcmVkTGlua1BhZ2luZyB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBTaGFyZWRMaW5rc0FwaSB7XG4gIHByaXZhdGUgYXBpU2VydmljZTogQXBpQ2xpZW50RmFjdG9yeTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmFwaVNlcnZpY2UgPSBuZXcgQXBpQ2xpZW50RmFjdG9yeSgpO1xuICB9XG4gIHN0YXRpYyBhc3luYyBpbml0aWFsaXplKHVzZXJOYW1lOiBzdHJpbmcsIHBhc3N3b3JkPzogc3RyaW5nKTogUHJvbWlzZTxTaGFyZWRMaW5rc0FwaT4ge1xuICAgIGNvbnN0IGNsYXNzT2JqID0gbmV3IFNoYXJlZExpbmtzQXBpKCk7XG4gICAgYXdhaXQgY2xhc3NPYmouYXBpU2VydmljZS5zZXRVcEFjYUJhY2tlbmQodXNlck5hbWUsIHBhc3N3b3JkKTtcbiAgICByZXR1cm4gY2xhc3NPYmo7XG4gIH1cblxuICBhc3luYyBzaGFyZUZpbGVCeUlkKGlkOiBzdHJpbmcsIGV4cGlyZURhdGU/OiBEYXRlKTogUHJvbWlzZTxTaGFyZWRMaW5rRW50cnkgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIG5vZGVJZDogaWQsXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlRGF0ZVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2Uuc2hhcmUuY3JlYXRlU2hhcmVkTGluayhkYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hhcmVGaWxlc0J5SWRzKGlkczogc3RyaW5nW10sIGV4cGlyZURhdGU/OiBEYXRlKTogUHJvbWlzZTxTaGFyZWRMaW5rRW50cnlbXT4ge1xuICAgIGNvbnN0IHNoYXJlZExpbmtzOiBTaGFyZWRMaW5rRW50cnlbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaWRzICYmIGlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzKSB7XG4gICAgICAgICAgY29uc3Qgc2hhcmVkTGluayA9IGF3YWl0IHRoaXMuc2hhcmVGaWxlQnlJZChpZCwgZXhwaXJlRGF0ZSk7XG4gICAgICAgICAgc2hhcmVkTGlua3MucHVzaChzaGFyZWRMaW5rKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBTaGFyZWRMaW5rc0FwaSBzaGFyZUZpbGVzQnlJZHMgOiBjYXRjaCA6IGAsIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXJlZExpbmtzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTaGFyZWRMaW5rcyhtYXhJdGVtczogbnVtYmVyID0gMjUwKTogUHJvbWlzZTxTaGFyZWRMaW5rUGFnaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgIG1heEl0ZW1zXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5zaGFyZS5saXN0U2hhcmVkTGlua3Mob3B0cyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFNoYXJlZExpbmtzQXBpIGdldFNoYXJlZExpbmtzIDogY2F0Y2ggOiBgLCBlcnJvcik7XG4gICAgICByZXR1cm4gbmV3IFNoYXJlZExpbmtQYWdpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB3YWl0Rm9yRmlsZXNUb0JlU2hhcmVkKGZpbGVzSWRzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaGFyZWRGaWxlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzaGFyZWRGaWxlcyA9IChhd2FpdCB0aGlzLmdldFNoYXJlZExpbmtzKCkpLmxpc3QuZW50cmllcy5tYXAoKGxpbmspID0+IGxpbmsuZW50cnkubm9kZUlkKTtcbiAgICAgICAgY29uc3QgZm91bmRJdGVtcyA9IGZpbGVzSWRzLmV2ZXJ5KChpZCkgPT4gc2hhcmVkRmlsZXMuaW5jbHVkZXMoaWQpKTtcbiAgICAgICAgaWYgKGZvdW5kSXRlbXMpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZvdW5kSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChmb3VuZEl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFV0aWxzLnJldHJ5Q2FsbChzaGFyZWRGaWxlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgU2hhcmVkTGlua3NBcGkgd2FpdEZvckZpbGVzVG9CZVNoYXJlZCA6ICBjYXRjaCA6ICR7ZXJyb3J9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXHRXYWl0IHRpbWVvdXQgcmVhY2hlZCB3YWl0aW5nIGZvciBmaWxlcyB0byBiZSBzaGFyZWRgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFNoYXJlZElkT2ZOb2RlKGZpbGVJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2hhcmVkTGlua3NFbnRyaWVzID0gKGF3YWl0IHRoaXMuZ2V0U2hhcmVkTGlua3MoKSk/Lmxpc3QuZW50cmllcztcbiAgICAgIGNvbnN0IGZvdW5kID0gc2hhcmVkTGlua3NFbnRyaWVzLmZpbmQoKHNoYXJlZExpbmspID0+IHNoYXJlZExpbmsuZW50cnkubm9kZUlkID09PSBmaWxlSWQpO1xuICAgICAgcmV0dXJuIGZvdW5kPy5lbnRyeS5pZDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgU2hhcmVkTGlua3NBcGkgZ2V0U2hhcmVkSWRPZk5vZGUgOiBjYXRjaCA6IGAsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuc2hhcmVGaWxlQnlJZChmaWxlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzaGFyZWRJZCA9IGF3YWl0IHRoaXMuZ2V0U2hhcmVkSWRPZk5vZGUoZmlsZUlkKTtcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2Uuc2hhcmUuZGVsZXRlU2hhcmVkTGluayhzaGFyZWRJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFNoYXJlZExpbmtzQXBpIHVuc2hhcmVGaWxlQnlJZCA6IGNhdGNoIDogYCwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHdhaXRGb3JGaWxlc1RvTm90QmVTaGFyZWQoZmlsZXNJZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2hhcmVkRmlsZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2hhcmVkRmlsZXMgPSAoYXdhaXQgdGhpcy5nZXRTaGFyZWRMaW5rcygpKS5saXN0LmVudHJpZXMubWFwKChsaW5rKSA9PiBsaW5rLmVudHJ5Lm5vZGVJZCk7XG5cbiAgICAgICAgY29uc3QgZm91bmRJdGVtcyA9IGZpbGVzSWRzLnNvbWUoKGlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHNoYXJlZEZpbGVzLmluY2x1ZGVzKGlkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGZvdW5kSXRlbXMpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZm91bmRJdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmb3VuZEl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIFV0aWxzLnJldHJ5Q2FsbChzaGFyZWRGaWxlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgU2hhcmVkTGlua3NBcGkgd2FpdEZvckZpbGVzVG9Ob3RCZVNoYXJlZCA6ICBjYXRjaCA6ICR7ZXJyb3J9YCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBcXHRXYWl0IHRpbWVvdXQgcmVhY2hlZCB3YWl0aW5nIGZvciBmaWxlcyB0byBubyBsb25nZXIgYmUgc2hhcmVkYCk7XG4gICAgfVxuICB9XG59XG4iXX0=