@po-ui/ng-sync 15.15.0 → 16.0.0-next.2

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 (127) hide show
  1. package/README.md +3 -3
  2. package/{esm2020 → esm2022}/lib/index.mjs +14 -14
  3. package/{esm2020 → esm2022}/lib/models/index.mjs +5 -5
  4. package/{esm2020 → esm2022}/lib/models/po-data-message.model.mjs +56 -56
  5. package/esm2022/lib/models/po-data-transform.model.mjs +23 -0
  6. package/esm2022/lib/models/po-entity/po-entity.model.mjs +217 -0
  7. package/esm2022/lib/models/po-event-sourcing-error-response.model.mjs +21 -0
  8. package/esm2022/lib/models/po-network-status.model.mjs +45 -0
  9. package/{esm2020 → esm2022}/lib/models/po-network-type.enum.mjs +29 -29
  10. package/esm2022/lib/models/po-query-builder/po-query-builder.model.mjs +246 -0
  11. package/{esm2020 → esm2022}/lib/models/po-request-type.enum.mjs +15 -15
  12. package/{esm2020 → esm2022}/lib/po-sync.module.mjs +40 -40
  13. package/{esm2020 → esm2022}/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.mjs +16 -16
  14. package/{esm2020 → esm2022}/lib/services/po-event-sourcing/index.mjs +3 -3
  15. package/{esm2020 → esm2022}/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.mjs +1 -1
  16. package/{esm2020 → esm2022}/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.mjs +1 -1
  17. package/esm2022/lib/services/po-event-sourcing/po-event-sourcing.service.mjs +379 -0
  18. package/{esm2020 → esm2022}/lib/services/po-http-client/interfaces/po-http-header-option.interface.mjs +10 -10
  19. package/{esm2020 → esm2022}/lib/services/po-http-client/interfaces/po-http-request-data.interface.mjs +1 -1
  20. package/{esm2020 → esm2022}/lib/services/po-http-client/interfaces/po-response-api.interface.mjs +1 -1
  21. package/esm2022/lib/services/po-http-client/po-http-client.service.mjs +149 -0
  22. package/{esm2020 → esm2022}/lib/services/po-http-client/po-http-request-type.enum.mjs +24 -24
  23. package/esm2022/lib/services/po-network/po-network.service.mjs +59 -0
  24. package/{esm2020 → esm2022}/lib/services/po-schema/index.mjs +3 -3
  25. package/esm2022/lib/services/po-schema/po-schema-definition/po-schema-definition.service.mjs +78 -0
  26. package/esm2022/lib/services/po-schema/po-schema-util/po-schema-util.model.mjs +124 -0
  27. package/esm2022/lib/services/po-schema/po-schema.service.mjs +176 -0
  28. package/{esm2020 → esm2022}/lib/services/po-sync/interfaces/po-sync-config.interface.mjs +1 -1
  29. package/{esm2020 → esm2022}/lib/services/po-sync/interfaces/po-sync-field-options.interface.mjs +1 -1
  30. package/{esm2020 → esm2022}/lib/services/po-sync/interfaces/po-sync-response.interface.mjs +1 -1
  31. package/{esm2020 → esm2022}/lib/services/po-sync/interfaces/po-sync-schema.interface.mjs +1 -1
  32. package/esm2022/lib/services/po-sync/po-sync.service.mjs +336 -0
  33. package/{esm2020 → esm2022}/lib/utils/utils.mjs +62 -62
  34. package/{esm2020 → esm2022}/po-ui-ng-sync.mjs +4 -4
  35. package/{esm2020 → esm2022}/public-api.mjs +1 -1
  36. package/{fesm2020 → fesm2022}/po-ui-ng-sync.mjs +2004 -1962
  37. package/{fesm2020 → fesm2022}/po-ui-ng-sync.mjs.map +1 -1
  38. package/index.d.ts +5 -5
  39. package/lib/index.d.ts +14 -14
  40. package/lib/models/index.d.ts +5 -5
  41. package/lib/models/po-data-message.model.d.ts +46 -46
  42. package/lib/models/po-data-transform.model.d.ts +52 -52
  43. package/lib/models/po-entity/po-entity.model.d.ts +122 -122
  44. package/lib/models/po-event-sourcing-error-response.model.d.ts +20 -20
  45. package/lib/models/po-network-status.model.d.ts +25 -25
  46. package/lib/models/po-network-type.enum.d.ts +28 -28
  47. package/lib/models/po-query-builder/po-query-builder.model.d.ts +126 -126
  48. package/lib/models/po-request-type.enum.d.ts +14 -14
  49. package/lib/po-sync.module.d.ts +11 -11
  50. package/lib/services/po-event-sourcing/enums/po-event-sourcing-operation.enum.d.ts +11 -11
  51. package/lib/services/po-event-sourcing/index.d.ts +3 -3
  52. package/lib/services/po-event-sourcing/interfaces/po-event-sourcing-item.interface.d.ts +26 -26
  53. package/lib/services/po-event-sourcing/interfaces/po-event-sourcing-summary-item.interface.d.ts +16 -16
  54. package/lib/services/po-event-sourcing/po-event-sourcing.service.d.ts +74 -74
  55. package/lib/services/po-http-client/interfaces/po-http-header-option.interface.d.ts +15 -15
  56. package/lib/services/po-http-client/interfaces/po-http-request-data.interface.d.ts +24 -24
  57. package/lib/services/po-http-client/interfaces/po-response-api.interface.d.ts +14 -14
  58. package/lib/services/po-http-client/po-http-client.service.d.ts +78 -78
  59. package/lib/services/po-http-client/po-http-request-type.enum.d.ts +23 -23
  60. package/lib/services/po-network/po-network.service.d.ts +35 -35
  61. package/lib/services/po-schema/index.d.ts +3 -3
  62. package/lib/services/po-schema/po-schema-definition/po-schema-definition.service.d.ts +51 -51
  63. package/lib/services/po-schema/po-schema-util/po-schema-util.model.d.ts +79 -79
  64. package/lib/services/po-schema/po-schema.service.d.ts +98 -98
  65. package/lib/services/po-sync/interfaces/po-sync-config.interface.d.ts +24 -24
  66. package/lib/services/po-sync/interfaces/po-sync-field-options.interface.d.ts +15 -15
  67. package/lib/services/po-sync/interfaces/po-sync-response.interface.d.ts +20 -20
  68. package/lib/services/po-sync/interfaces/po-sync-schema.interface.d.ts +37 -37
  69. package/lib/services/po-sync/po-sync.service.d.ts +162 -162
  70. package/lib/utils/utils.d.ts +36 -36
  71. package/package.json +10 -16
  72. package/po-ui-ng-sync-16.0.0-next.2.tgz +0 -0
  73. package/public-api.d.ts +1 -1
  74. package/schematics/migrations.json +1 -1
  75. package/schematics/ng-add/index.d.ts +7 -7
  76. package/schematics/ng-add/index.js +31 -31
  77. package/schematics/ng-add/index.spec.d.ts +1 -1
  78. package/schematics/ng-add/index.spec.js +60 -60
  79. package/schematics/ng-generate/schema/index.d.ts +4 -4
  80. package/schematics/ng-generate/schema/index.js +12 -12
  81. package/schematics/ng-generate/schema/index.spec.d.ts +1 -1
  82. package/schematics/ng-generate/schema/index.spec.js +44 -44
  83. package/schematics/ng-generate/schema/schema.d.ts +3 -3
  84. package/schematics/ng-generate/schema/schema.js +2 -2
  85. package/schematics/ng-update/v14/changes.d.ts +2 -2
  86. package/schematics/ng-update/v14/changes.js +13 -13
  87. package/schematics/ng-update/v14/index.d.ts +1 -1
  88. package/schematics/ng-update/v14/index.js +15 -15
  89. package/schematics/ng-update/v15/changes.d.ts +4 -4
  90. package/schematics/ng-update/v15/changes.js +15 -15
  91. package/schematics/ng-update/v15/index.d.ts +1 -1
  92. package/schematics/ng-update/v15/index.js +36 -36
  93. package/schematics/ng-update/v2/changes.d.ts +8 -8
  94. package/schematics/ng-update/v2/changes.js +20 -20
  95. package/schematics/ng-update/v2/index.d.ts +5 -5
  96. package/schematics/ng-update/v2/index.js +101 -101
  97. package/schematics/ng-update/v3/changes.d.ts +2 -2
  98. package/schematics/ng-update/v3/changes.js +14 -14
  99. package/schematics/ng-update/v3/index.d.ts +1 -1
  100. package/schematics/ng-update/v3/index.js +16 -16
  101. package/schematics/ng-update/v4/changes.d.ts +2 -2
  102. package/schematics/ng-update/v4/changes.js +14 -14
  103. package/schematics/ng-update/v4/index.d.ts +1 -1
  104. package/schematics/ng-update/v4/index.js +15 -15
  105. package/schematics/ng-update/v5/changes.d.ts +2 -2
  106. package/schematics/ng-update/v5/changes.js +13 -13
  107. package/schematics/ng-update/v5/index.d.ts +1 -1
  108. package/schematics/ng-update/v5/index.js +15 -15
  109. package/schematics/ng-update/v6/changes.d.ts +2 -2
  110. package/schematics/ng-update/v6/changes.js +13 -13
  111. package/schematics/ng-update/v6/index.d.ts +1 -1
  112. package/schematics/ng-update/v6/index.js +15 -15
  113. package/esm2020/lib/models/po-data-transform.model.mjs +0 -22
  114. package/esm2020/lib/models/po-entity/po-entity.model.mjs +0 -214
  115. package/esm2020/lib/models/po-event-sourcing-error-response.model.mjs +0 -17
  116. package/esm2020/lib/models/po-network-status.model.mjs +0 -44
  117. package/esm2020/lib/models/po-query-builder/po-query-builder.model.mjs +0 -238
  118. package/esm2020/lib/services/po-event-sourcing/po-event-sourcing.service.mjs +0 -372
  119. package/esm2020/lib/services/po-http-client/po-http-client.service.mjs +0 -148
  120. package/esm2020/lib/services/po-network/po-network.service.mjs +0 -56
  121. package/esm2020/lib/services/po-schema/po-schema-definition/po-schema-definition.service.mjs +0 -77
  122. package/esm2020/lib/services/po-schema/po-schema-util/po-schema-util.model.mjs +0 -124
  123. package/esm2020/lib/services/po-schema/po-schema.service.mjs +0 -174
  124. package/esm2020/lib/services/po-sync/po-sync.service.mjs +0 -325
  125. package/fesm2015/po-ui-ng-sync.mjs +0 -2113
  126. package/fesm2015/po-ui-ng-sync.mjs.map +0 -1
  127. package/po-ui-ng-sync-15.15.0.tgz +0 -0
@@ -1,372 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { StatusCodes } from 'http-status-codes';
3
- import { Observable, of, Subject } from 'rxjs';
4
- import { expand, map, reduce } from 'rxjs/operators';
5
- import { toBase64, toFile } from '../../utils/utils';
6
- import { PoEventSourcingErrorResponse } from '../../models/po-event-sourcing-error-response.model';
7
- import { PoEventSourcingOperation } from './enums/po-event-sourcing-operation.enum';
8
- import { PoHttpRequestType } from '../po-http-client/po-http-request-type.enum';
9
- import { PoRequestType } from '../../models/po-request-type.enum';
10
- import { PoSchemaUtil } from './../po-schema/po-schema-util/po-schema-util.model';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "./../po-schema/po-schema-definition/po-schema-definition.service";
13
- import * as i2 from "./../po-schema/po-schema.service";
14
- import * as i3 from "@po-ui/ng-storage";
15
- import * as i4 from "./../po-http-client/po-http-client.service";
16
- export class PoEventSourcingService {
17
- constructor(poSchemaDefinition, poSchemaService, poStorage, poHttpClient) {
18
- this.poSchemaDefinition = poSchemaDefinition;
19
- this.poSchemaService = poSchemaService;
20
- this.poStorage = poStorage;
21
- this.poHttpClient = poHttpClient;
22
- this.stoppedQueueEventSourcing = false;
23
- this.responseSubject = new Subject();
24
- this.schemasSyncConfig = {};
25
- }
26
- static getUrl(eventSourcingItem, schema, requestType) {
27
- const schemaUrl = PoSchemaUtil.getUrl(schema, requestType);
28
- const schemaId = eventSourcingItem.record[schema.idField];
29
- if (requestType === PoRequestType.GET) {
30
- return schemaUrl;
31
- }
32
- if ([PoRequestType.DELETE, PoRequestType.PATCH].includes(requestType)) {
33
- return schemaUrl ? `${schemaUrl}/${schemaId}` : `${PoSchemaUtil.getUrl(schema, PoRequestType.GET)}/${schemaId}`;
34
- }
35
- if (requestType === PoRequestType.POST) {
36
- return schemaUrl ? schemaUrl : PoSchemaUtil.getUrl(schema, PoRequestType.GET);
37
- }
38
- }
39
- create(schemaName, newItem, customRequestId) {
40
- const eventSourcingItem = this.createEventSourcingItem(PoEventSourcingOperation.Insert, newItem, schemaName, customRequestId);
41
- return this.insertEventSourcingQueue(eventSourcingItem);
42
- }
43
- async createBatchEvents(schemaName, eventList) {
44
- const eventSourcingList = this.createEventSourcingList(schemaName, eventList);
45
- await this.poStorage.appendArrayToArray(PoEventSourcingService.event_sourcing_name, eventSourcingList);
46
- this.notifyEventCreation();
47
- }
48
- /**
49
- * Destrói a chave do *storage* que contém a fila de dados que estão esperando para serem enviados ao
50
- * servidor *(EventSourcing)*.
51
- *
52
- * @returns {Promise<void>} Promessa que é resolvida quando a chave referente a fila de *EventSourcing* for destruída.
53
- */
54
- destroyEventSourcingQueue() {
55
- return this.poStorage.remove(PoEventSourcingService.event_sourcing_name);
56
- }
57
- async httpCommand(httpOperationData, customRequestId) {
58
- httpOperationData = await this.serializeBody(httpOperationData);
59
- const eventSourcingItem = this.createEventSourcingItem(PoEventSourcingOperation.Http, httpOperationData, undefined, customRequestId);
60
- await this.insertEventSourcingQueue(eventSourcingItem);
61
- return eventSourcingItem.id;
62
- }
63
- responsesSubject() {
64
- return this.responseSubject.asObservable();
65
- }
66
- onSaveData() {
67
- if (!this.eventSub) {
68
- this.eventSub = Observable.create(subscriber => (this.emitter = subscriber));
69
- }
70
- return this.eventSub;
71
- }
72
- remove(schemaName, itemToDelete, customRequestId) {
73
- const eventSourcingItem = this.createEventSourcingItem(PoEventSourcingOperation.Delete, itemToDelete, schemaName, customRequestId);
74
- return this.insertEventSourcingQueue(eventSourcingItem);
75
- }
76
- removeEventSourcingItem(idEventSourcingItem) {
77
- return this.poStorage.removeItemFromArray(PoEventSourcingService.event_sourcing_name, 'id', idEventSourcingItem);
78
- }
79
- syncGet() {
80
- const syncGetFunction = async () => this.poSchemaDefinition.getAll().then(schemas => {
81
- const schemaPromises = this.updateStorageSchemas(schemas);
82
- return Promise.all(schemaPromises);
83
- });
84
- return this.poSchemaService.limitedCallWrap(syncGetFunction);
85
- }
86
- async syncSend() {
87
- const syncSendFunction = async () => {
88
- const itemOfQueue = await this.poStorage.getFirstItem(PoEventSourcingService.event_sourcing_name);
89
- if (itemOfQueue) {
90
- await this.selectOperation(itemOfQueue);
91
- }
92
- if (this.stoppedQueueEventSourcing || !itemOfQueue) {
93
- this.stoppedQueueEventSourcing = false;
94
- return Promise.resolve();
95
- }
96
- return syncSendFunction();
97
- };
98
- return this.poSchemaService.limitedCallWrap(syncSendFunction);
99
- }
100
- update(schemaName, itemUpdated, customRequestId) {
101
- const eventSourcingItem = this.createEventSourcingItem(PoEventSourcingOperation.Update, itemUpdated, schemaName, customRequestId);
102
- return this.insertEventSourcingQueue(eventSourcingItem);
103
- }
104
- /* Avalia se o body é do tipo File e se for converte para base64 */
105
- async serializeBody(requestData) {
106
- let { body, mimeType, bodyType, fileName } = requestData;
107
- if (body instanceof File) {
108
- bodyType = 'File';
109
- mimeType = body.type;
110
- fileName = body.name;
111
- body = await toBase64(body);
112
- }
113
- return { ...requestData, body, mimeType, bodyType, fileName };
114
- }
115
- buildUrlParams(schema, baseUrl, pageNumber) {
116
- const params = [];
117
- params.push(`${this.config.dataTransform.getPageSizeParamName()}=${schema.pageSize}`);
118
- params.push(`${this.config.dataTransform.getPageParamName()}=${pageNumber}`);
119
- return `${baseUrl}?${params.join('&')}`;
120
- }
121
- checkRecordIdExists(recordId, operation) {
122
- if (!recordId) {
123
- const error = {
124
- message: 'Identifier not defined',
125
- operation: operation
126
- };
127
- throw new PoEventSourcingErrorResponse(error);
128
- }
129
- }
130
- concatPageItems(pageAcumulator, requestBody) {
131
- if (requestBody[this.config.dataTransform.getItemsFieldName()]) {
132
- pageAcumulator.data = [...pageAcumulator.data, ...requestBody[this.config.dataTransform.getItemsFieldName()]];
133
- }
134
- return pageAcumulator;
135
- }
136
- createEventSourcingItem(operation, newItem, schemaName, customRequestId, id) {
137
- if (!schemaName && operation !== PoEventSourcingOperation.Http) {
138
- throw new Error('PoSyncSchema is not defined.');
139
- }
140
- return {
141
- id: id ? id : new Date().getTime(),
142
- dateTime: new Date().getTime(),
143
- schema: schemaName,
144
- operation: operation,
145
- record: newItem,
146
- customRequestId: customRequestId
147
- };
148
- }
149
- createEventSourcingList(schemaName, eventList) {
150
- return eventList.map((eventItem, index) => {
151
- const id = new Date().getTime() + index;
152
- return this.createEventSourcingItem(eventItem.operation, eventItem.record, schemaName, eventItem.customRequestId, id);
153
- });
154
- }
155
- createSchemaSyncConfig(schemaName) {
156
- this.schemasSyncConfig[schemaName] = {
157
- page: undefined,
158
- currentUrlDiff: undefined,
159
- responseDate: undefined
160
- };
161
- }
162
- async deleteOperation(eventSourcingItem) {
163
- try {
164
- const schema = await this.poSchemaDefinition.get(eventSourcingItem.schema);
165
- const recordId = eventSourcingItem.record[schema.idField];
166
- this.checkRecordIdExists(recordId, PoEventSourcingOperation.Delete);
167
- const url = PoEventSourcingService.getUrl(eventSourcingItem, schema, PoRequestType.DELETE);
168
- const response = await this.sendServerItem(url, PoHttpRequestType.DELETE);
169
- await this.removeEventSourcingValidItem(response.status, eventSourcingItem);
170
- return await this.sendResponseSubject(eventSourcingItem, response);
171
- }
172
- catch (errorResponse) {
173
- return this.sendResponseSubject(eventSourcingItem, errorResponse, true);
174
- }
175
- }
176
- diffServerItems(currentUrlDiff) {
177
- return this.poHttpClient.get(currentUrlDiff);
178
- }
179
- getBodyAndDate(schemaName, response) {
180
- const getDateFieldName = this.config.dataTransform.getDateFieldName();
181
- const responseSyncDate = response.body[getDateFieldName];
182
- this.schemasSyncConfig[schemaName]['responseDate'] = responseSyncDate;
183
- return response.body;
184
- }
185
- async getServerDiffRecords(schema, baseUrl) {
186
- const initialAcumulatorPage = { entity: schema.name, data: [] };
187
- const diffUrl = this.schemasSyncConfig[schema.name]['currentUrlDiff'];
188
- const serverResponse = await this.diffServerItems(diffUrl)
189
- .pipe(map(response => this.getBodyAndDate(schema.name, response)), expand(data => this.paginateSchemaData(data, schema, baseUrl)), reduce((pageAcumulator, requestBody) => this.concatPageItems(pageAcumulator, requestBody), initialAcumulatorPage))
190
- .toPromise();
191
- return serverResponse.data;
192
- }
193
- async httpOperation(eventSourcingItem) {
194
- try {
195
- const requestData = await this.createPoHttpRequestData(eventSourcingItem.record.url, eventSourcingItem.record.method, eventSourcingItem.record, eventSourcingItem.record.headers);
196
- const response = await this.poHttpClient.createRequest(requestData).toPromise();
197
- const poHttpCommandResponse = {
198
- id: eventSourcingItem.id,
199
- customRequestId: eventSourcingItem.customRequestId,
200
- request: eventSourcingItem.record,
201
- response: response
202
- };
203
- this.responseSubject.next(poHttpCommandResponse);
204
- return this.removeEventSourcingValidItem(response.status, eventSourcingItem);
205
- }
206
- catch (errorHttpClient) {
207
- return this.sendResponseSubject(eventSourcingItem, errorHttpClient, true);
208
- }
209
- }
210
- async insertEventSourcingQueue(eventSourcingItem) {
211
- const eventSourcingUpdatedQueue = await this.poStorage.appendItemToArray(PoEventSourcingService.event_sourcing_name, eventSourcingItem);
212
- this.notifyEventCreation();
213
- return Promise.resolve(eventSourcingUpdatedQueue);
214
- }
215
- async insertOperation(currentEventSourcingItem) {
216
- const schema = await this.poSchemaDefinition.get(currentEventSourcingItem.schema);
217
- const url = PoEventSourcingService.getUrl(currentEventSourcingItem, schema, PoRequestType.POST);
218
- try {
219
- const response = await this.sendServerItem(url, PoHttpRequestType.POST, currentEventSourcingItem.record);
220
- const recordUpdatedByServer = response.body;
221
- await this.removeEventSourcingValidItem(response.status, currentEventSourcingItem);
222
- const id = currentEventSourcingItem.record[PoSchemaUtil.syncInternalIdFieldName];
223
- await this.poSchemaService.update(schema, recordUpdatedByServer, id);
224
- const eventSourcingItems = await this.poStorage.get(PoEventSourcingService.event_sourcing_name);
225
- await this.updatePendingEventSourcing(currentEventSourcingItem, schema.idField, recordUpdatedByServer, eventSourcingItems);
226
- return this.sendResponseSubject(currentEventSourcingItem, response);
227
- }
228
- catch (errorHttpClient) {
229
- return this.sendResponseSubject(currentEventSourcingItem, errorHttpClient, true);
230
- }
231
- }
232
- isValidStatus(status) {
233
- return PoEventSourcingService.VALID_HTTP_STATUS_CODES.includes(status);
234
- }
235
- notifyEventCreation() {
236
- if (this.emitter) {
237
- this.emitter.next();
238
- }
239
- }
240
- paginateSchemaData(data, schema, baseUrl) {
241
- this.config.dataTransform.transform(data);
242
- if (this.config.dataTransform.hasNext()) {
243
- this.schemasSyncConfig[schema.name]['currentUrlDiff'] = this.buildUrlParams(schema, baseUrl, ++this.schemasSyncConfig[schema.name]['page']);
244
- return this.diffServerItems(this.schemasSyncConfig[schema.name]['currentUrlDiff']).pipe(map(response => this.getBodyAndDate(schema.name, response)));
245
- }
246
- return of();
247
- }
248
- removeEventSourcingValidItem(status, eventSourcingItem) {
249
- if (this.isValidStatus(status) || eventSourcingItem.operation === PoEventSourcingOperation.Http) {
250
- return this.removeEventSourcingItem(eventSourcingItem.id);
251
- }
252
- }
253
- selectOperation(eventSourcingItem) {
254
- switch (eventSourcingItem.operation) {
255
- case PoEventSourcingOperation.Insert:
256
- return this.insertOperation(eventSourcingItem);
257
- case PoEventSourcingOperation.Update:
258
- return this.updateOperation(eventSourcingItem);
259
- case PoEventSourcingOperation.Delete:
260
- return this.deleteOperation(eventSourcingItem);
261
- case PoEventSourcingOperation.Http:
262
- return this.httpOperation(eventSourcingItem);
263
- }
264
- }
265
- sendResponseSubject(eventSourcingItem, response, isSubjectError = false) {
266
- const poSyncResponse = {
267
- id: eventSourcingItem.id,
268
- customRequestId: eventSourcingItem.customRequestId,
269
- request: eventSourcingItem.record,
270
- response: response
271
- };
272
- this.stoppedQueueEventSourcing = isSubjectError;
273
- this.responseSubject.next(poSyncResponse);
274
- return Promise.resolve();
275
- }
276
- async sendServerItem(url, method, body) {
277
- const requestData = await this.createPoHttpRequestData(url, method, body);
278
- return this.poHttpClient.createRequest(requestData).toPromise();
279
- }
280
- async createPoHttpRequestData(url, method, record, headers) {
281
- let body = record.body ?? record;
282
- if (record.bodyType === 'File') {
283
- body = await this.createFormData(body, record.fileName, record.mimeType, record.formField);
284
- }
285
- return { url, method, body, headers };
286
- }
287
- async createFormData(body, fileName, mimeType, formField = 'file') {
288
- const file = await toFile(body, fileName, mimeType);
289
- const formData = new FormData();
290
- formData.append(formField, file, fileName);
291
- return formData;
292
- }
293
- async updateOperation(eventSourcingItem) {
294
- const schema = await this.poSchemaDefinition.get(eventSourcingItem.schema);
295
- const url = PoEventSourcingService.getUrl(eventSourcingItem, schema, PoRequestType.PATCH);
296
- try {
297
- const recordId = eventSourcingItem.record[schema.idField];
298
- this.checkRecordIdExists(recordId, PoEventSourcingOperation.Update);
299
- const response = await this.sendServerItem(url, PoHttpRequestType.PUT, eventSourcingItem.record);
300
- await this.removeEventSourcingValidItem(response.status, eventSourcingItem);
301
- return await this.sendResponseSubject(eventSourcingItem, response);
302
- }
303
- catch (errorHttpClient) {
304
- return this.sendResponseSubject(eventSourcingItem, errorHttpClient, true);
305
- }
306
- }
307
- updatePendingEventSourcing(currentEventSourcingItem, idFieldSchema, inserted, eventSourcingItems) {
308
- if (currentEventSourcingItem.record[PoSchemaUtil.syncInternalIdFieldName]) {
309
- eventSourcingItems.forEach((eventSourcingItem, position) => {
310
- const isCurrentEventSourcingItem = !eventSourcingItem.record[idFieldSchema] &&
311
- eventSourcingItem.record[PoSchemaUtil.syncInternalIdFieldName] ===
312
- currentEventSourcingItem.record[PoSchemaUtil.syncInternalIdFieldName];
313
- if (isCurrentEventSourcingItem) {
314
- eventSourcingItems[position].record[idFieldSchema] = inserted[idFieldSchema];
315
- }
316
- });
317
- return this.poStorage.set(PoEventSourcingService.event_sourcing_name, eventSourcingItems);
318
- }
319
- else {
320
- return Promise.resolve();
321
- }
322
- }
323
- async updateRecords(serverRecords, schema) {
324
- for (const serverRecord of serverRecords) {
325
- await this.updateRecordByServerRecord(serverRecord, schema);
326
- }
327
- }
328
- async updateRecordByServerRecord(serverRecord, schema) {
329
- const recordId = serverRecord[schema.idField];
330
- const storageRecord = await this.poSchemaService.get(schema.name, recordId);
331
- const existsStorageRecord = !!Object.keys(storageRecord).length;
332
- if (existsStorageRecord && serverRecord[schema.deletedField]) {
333
- return await this.poSchemaService.remove(schema.name, serverRecord[schema.idField]);
334
- }
335
- if (existsStorageRecord && !serverRecord[schema.deletedField]) {
336
- return await this.poSchemaService.update(schema, serverRecord);
337
- }
338
- if (!existsStorageRecord && !serverRecord[schema.deletedField]) {
339
- return await this.poSchemaService.create(schema, serverRecord);
340
- }
341
- }
342
- async updateStorageBySchema(schema) {
343
- this.createSchemaSyncConfig(schema.name);
344
- this.schemasSyncConfig[schema.name]['page'] = 1;
345
- const baseUrl = `${PoSchemaUtil.getUrl(schema, PoRequestType.DIFF)}/${schema.lastSync}`;
346
- this.schemasSyncConfig[schema.name]['currentUrlDiff'] = this.buildUrlParams(schema, baseUrl, this.schemasSyncConfig[schema.name]['page']);
347
- const serverRecords = await this.getServerDiffRecords(schema, baseUrl);
348
- await this.updateRecords(serverRecords, schema);
349
- schema.lastSync = this.schemasSyncConfig[schema.name]['responseDate'];
350
- await this.poSchemaDefinition.update(schema);
351
- }
352
- updateStorageSchemas(schemas) {
353
- return schemas.map((schema) => this.updateStorageBySchema(schema));
354
- }
355
- }
356
- PoEventSourcingService.event_sourcing_name = 'EventSourcing';
357
- PoEventSourcingService.VALID_HTTP_STATUS_CODES = [
358
- StatusCodes.OK,
359
- StatusCodes.CREATED,
360
- StatusCodes.ACCEPTED,
361
- StatusCodes.NON_AUTHORITATIVE_INFORMATION,
362
- StatusCodes.NO_CONTENT,
363
- StatusCodes.RESET_CONTENT,
364
- StatusCodes.PARTIAL_CONTENT,
365
- StatusCodes.MULTI_STATUS // 207
366
- ];
367
- PoEventSourcingService.ɵfac = function PoEventSourcingService_Factory(t) { return new (t || PoEventSourcingService)(i0.ɵɵinject(i1.PoSchemaDefinitionService), i0.ɵɵinject(i2.PoSchemaService), i0.ɵɵinject(i3.PoStorageService), i0.ɵɵinject(i4.PoHttpClientService)); };
368
- PoEventSourcingService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PoEventSourcingService, factory: PoEventSourcingService.ɵfac });
369
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoEventSourcingService, [{
370
- type: Injectable
371
- }], function () { return [{ type: i1.PoSchemaDefinitionService }, { type: i2.PoSchemaService }, { type: i3.PoStorageService }, { type: i4.PoHttpClientService }]; }, null); })();
372
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZXZlbnQtc291cmNpbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9zZXJ2aWNlcy9wby1ldmVudC1zb3VyY2luZy9wby1ldmVudC1zb3VyY2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRW5HLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBS3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7OztBQU1sRixNQUFNLE9BQU8sc0JBQXNCO0lBdUJqQyxZQUNVLGtCQUE2QyxFQUM3QyxlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixZQUFpQztRQUhqQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQTJCO1FBQzdDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFaM0MsOEJBQXlCLEdBQVksS0FB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TSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDOztBQTloQmUsMENBQW1CLEdBQVcsZUFBZSxDQUFDO0FBRXRDLDhDQUF1QixHQUFHO0lBQ2hELFdBQVcsQ0FBQyxFQUFFO0lBQ2QsV0FBVyxDQUFDLE9BQU87SUFDbkIsV0FBVyxDQUFDLFFBQVE7SUFDcEIsV0FBVyxDQUFDLDZCQUE2QjtJQUN6QyxXQUFXLENBQUMsVUFBVTtJQUN0QixXQUFXLENBQUMsYUFBYTtJQUN6QixXQUFXLENBQUMsZUFBZTtJQUMzQixXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU07Q0FDaEMsQ0FBQzs0RkFaUyxzQkFBc0I7NEVBQXRCLHNCQUFzQixXQUF0QixzQkFBc0I7dUZBQXRCLHNCQUFzQjtjQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFJlc3BvbnNlLCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU3RhdHVzQ29kZXMgfSBmcm9tICdodHRwLXN0YXR1cy1jb2Rlcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGV4cGFuZCwgbWFwLCByZWR1Y2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBQb1N0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQHBvLXVpL25nLXN0b3JhZ2UnO1xyXG5cclxuaW1wb3J0IHsgdG9CYXNlNjQsIHRvRmlsZSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IFBvRXZlbnRTb3VyY2luZ0Vycm9yUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvcG8tZXZlbnQtc291cmNpbmctZXJyb3ItcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBQb0V2ZW50U291cmNpbmdJdGVtIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWV2ZW50LXNvdXJjaW5nLWl0ZW0uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uIH0gZnJvbSAnLi9lbnVtcy9wby1ldmVudC1zb3VyY2luZy1vcGVyYXRpb24uZW51bSc7XHJcbmltcG9ydCB7IFBvRXZlbnRTb3VyY2luZ1N1bW1hcnlJdGVtIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWV2ZW50LXNvdXJjaW5nLXN1bW1hcnktaXRlbS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb0h0dHBIZWFkZXJPcHRpb24gfSBmcm9tICcuLy4uL3BvLWh0dHAtY2xpZW50L2ludGVyZmFjZXMvcG8taHR0cC1oZWFkZXItb3B0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvSHR0cENsaWVudFNlcnZpY2UgfSBmcm9tICcuLy4uL3BvLWh0dHAtY2xpZW50L3BvLWh0dHAtY2xpZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb0h0dHBSZXF1ZXN0RGF0YSB9IGZyb20gJy4uL3BvLWh0dHAtY2xpZW50L2ludGVyZmFjZXMvcG8taHR0cC1yZXF1ZXN0LWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUG9IdHRwUmVxdWVzdFR5cGUgfSBmcm9tICcuLi9wby1odHRwLWNsaWVudC9wby1odHRwLXJlcXVlc3QtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgUG9SZXF1ZXN0VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9wby1yZXF1ZXN0LXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFBvU2NoZW1hRGVmaW5pdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uL3BvLXNjaGVtYS9wby1zY2hlbWEtZGVmaW5pdGlvbi9wby1zY2hlbWEtZGVmaW5pdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9TY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi8uLi9wby1zY2hlbWEvcG8tc2NoZW1hLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb1NjaGVtYVV0aWwgfSBmcm9tICcuLy4uL3BvLXNjaGVtYS9wby1zY2hlbWEtdXRpbC9wby1zY2hlbWEtdXRpbC5tb2RlbCc7XHJcbmltcG9ydCB7IFBvU3luY0NvbmZpZyB9IGZyb20gJy4uL3BvLXN5bmMvaW50ZXJmYWNlcy9wby1zeW5jLWNvbmZpZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBQb1N5bmNSZXNwb25zZSB9IGZyb20gJy4uL3BvLXN5bmMvaW50ZXJmYWNlcy9wby1zeW5jLXJlc3BvbnNlLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvU3luY1NjaGVtYSB9IGZyb20gJy4vLi4vcG8tc3luYy9pbnRlcmZhY2VzL3BvLXN5bmMtc2NoZW1hLmludGVyZmFjZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQb0V2ZW50U291cmNpbmdTZXJ2aWNlIHtcclxuICBzdGF0aWMgcmVhZG9ubHkgZXZlbnRfc291cmNpbmdfbmFtZTogc3RyaW5nID0gJ0V2ZW50U291cmNpbmcnO1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBWQUxJRF9IVFRQX1NUQVRVU19DT0RFUyA9IFtcclxuICAgIFN0YXR1c0NvZGVzLk9LLCAvLyAyMDBcclxuICAgIFN0YXR1c0NvZGVzLkNSRUFURUQsIC8vIDIwMVxyXG4gICAgU3RhdHVzQ29kZXMuQUNDRVBURUQsIC8vIDIwMlxyXG4gICAgU3RhdHVzQ29kZXMuTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04sIC8vIDIwM1xyXG4gICAgU3RhdHVzQ29kZXMuTk9fQ09OVEVOVCwgLy8gMjA0XHJcbiAgICBTdGF0dXNDb2Rlcy5SRVNFVF9DT05URU5ULCAvLyAyMDVcclxuICAgIFN0YXR1c0NvZGVzLlBBUlRJQUxfQ09OVEVOVCwgLy8gMjA2XHJcbiAgICBTdGF0dXNDb2Rlcy5NVUxUSV9TVEFUVVMgLy8gMjA3XHJcbiAgXTtcclxuXHJcbiAgY29uZmlnOiBQb1N5bmNDb25maWc7XHJcbiAgc3RvcHBlZFF1ZXVlRXZlbnRTb3VyY2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGVtaXR0ZXI6IGFueTtcclxuICBwcml2YXRlIGV2ZW50U3ViOiBPYnNlcnZhYmxlPG51bGw+O1xyXG4gIHByaXZhdGUgcmVzcG9uc2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8UG9TeW5jUmVzcG9uc2U+KCk7XHJcblxyXG4gIHByaXZhdGUgc2NoZW1hc1N5bmNDb25maWcgPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBvU2NoZW1hRGVmaW5pdGlvbjogUG9TY2hlbWFEZWZpbml0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgcG9TY2hlbWFTZXJ2aWNlOiBQb1NjaGVtYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvU3RvcmFnZTogUG9TdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcG9IdHRwQ2xpZW50OiBQb0h0dHBDbGllbnRTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBnZXRVcmwoZXZlbnRTb3VyY2luZ0l0ZW0sIHNjaGVtYSwgcmVxdWVzdFR5cGUpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2NoZW1hVXJsID0gUG9TY2hlbWFVdGlsLmdldFVybChzY2hlbWEsIHJlcXVlc3RUeXBlKTtcclxuICAgIGNvbnN0IHNjaGVtYUlkID0gZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkW3NjaGVtYS5pZEZpZWxkXTtcclxuXHJcbiAgICBpZiAocmVxdWVzdFR5cGUgPT09IFBvUmVxdWVzdFR5cGUuR0VUKSB7XHJcbiAgICAgIHJldHVybiBzY2hlbWFVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFtQb1JlcXVlc3RUeXBlLkRFTEVURSwgUG9SZXF1ZXN0VHlwZS5QQVRDSF0uaW5jbHVkZXMocmVxdWVzdFR5cGUpKSB7XHJcbiAgICAgIHJldHVybiBzY2hlbWFVcmwgPyBgJHtzY2hlbWFVcmx9LyR7c2NoZW1hSWR9YCA6IGAke1BvU2NoZW1hVXRpbC5nZXRVcmwoc2NoZW1hLCBQb1JlcXVlc3RUeXBlLkdFVCl9LyR7c2NoZW1hSWR9YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVxdWVzdFR5cGUgPT09IFBvUmVxdWVzdFR5cGUuUE9TVCkge1xyXG4gICAgICByZXR1cm4gc2NoZW1hVXJsID8gc2NoZW1hVXJsIDogUG9TY2hlbWFVdGlsLmdldFVybChzY2hlbWEsIFBvUmVxdWVzdFR5cGUuR0VUKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZShzY2hlbWFOYW1lOiBzdHJpbmcsIG5ld0l0ZW06IGFueSwgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGV2ZW50U291cmNpbmdJdGVtID0gdGhpcy5jcmVhdGVFdmVudFNvdXJjaW5nSXRlbShcclxuICAgICAgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkluc2VydCxcclxuICAgICAgbmV3SXRlbSxcclxuICAgICAgc2NoZW1hTmFtZSxcclxuICAgICAgY3VzdG9tUmVxdWVzdElkXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0RXZlbnRTb3VyY2luZ1F1ZXVlKGV2ZW50U291cmNpbmdJdGVtKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZUJhdGNoRXZlbnRzKHNjaGVtYU5hbWU6IHN0cmluZywgZXZlbnRMaXN0OiBBcnJheTxQb0V2ZW50U291cmNpbmdTdW1tYXJ5SXRlbT4pIHtcclxuICAgIGNvbnN0IGV2ZW50U291cmNpbmdMaXN0ID0gdGhpcy5jcmVhdGVFdmVudFNvdXJjaW5nTGlzdChzY2hlbWFOYW1lLCBldmVudExpc3QpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMucG9TdG9yYWdlLmFwcGVuZEFycmF5VG9BcnJheShQb0V2ZW50U291cmNpbmdTZXJ2aWNlLmV2ZW50X3NvdXJjaW5nX25hbWUsIGV2ZW50U291cmNpbmdMaXN0KTtcclxuXHJcbiAgICB0aGlzLm5vdGlmeUV2ZW50Q3JlYXRpb24oKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlc3Ryw7NpIGEgY2hhdmUgZG8gKnN0b3JhZ2UqIHF1ZSBjb250w6ltIGEgZmlsYSBkZSBkYWRvcyBxdWUgZXN0w6NvIGVzcGVyYW5kbyBwYXJhIHNlcmVtIGVudmlhZG9zIGFvXHJcbiAgICogc2Vydmlkb3IgKihFdmVudFNvdXJjaW5nKSouXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gUHJvbWVzc2EgcXVlIMOpIHJlc29sdmlkYSBxdWFuZG8gYSBjaGF2ZSByZWZlcmVudGUgYSBmaWxhIGRlICpFdmVudFNvdXJjaW5nKiBmb3IgZGVzdHJ1w61kYS5cclxuICAgKi9cclxuICBkZXN0cm95RXZlbnRTb3VyY2luZ1F1ZXVlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMucG9TdG9yYWdlLnJlbW92ZShQb0V2ZW50U291cmNpbmdTZXJ2aWNlLmV2ZW50X3NvdXJjaW5nX25hbWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaHR0cENvbW1hbmQoaHR0cE9wZXJhdGlvbkRhdGE6IFBvSHR0cFJlcXVlc3REYXRhLCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgaHR0cE9wZXJhdGlvbkRhdGEgPSBhd2FpdCB0aGlzLnNlcmlhbGl6ZUJvZHkoaHR0cE9wZXJhdGlvbkRhdGEpO1xyXG5cclxuICAgIGNvbnN0IGV2ZW50U291cmNpbmdJdGVtID0gdGhpcy5jcmVhdGVFdmVudFNvdXJjaW5nSXRlbShcclxuICAgICAgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkh0dHAsXHJcbiAgICAgIGh0dHBPcGVyYXRpb25EYXRhLFxyXG4gICAgICB1bmRlZmluZWQsXHJcbiAgICAgIGN1c3RvbVJlcXVlc3RJZFxyXG4gICAgKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmluc2VydEV2ZW50U291cmNpbmdRdWV1ZShldmVudFNvdXJjaW5nSXRlbSk7XHJcbiAgICByZXR1cm4gZXZlbnRTb3VyY2luZ0l0ZW0uaWQ7XHJcbiAgfVxyXG5cclxuICByZXNwb25zZXNTdWJqZWN0KCk6IE9ic2VydmFibGU8UG9TeW5jUmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIG9uU2F2ZURhdGEoKTogT2JzZXJ2YWJsZTxudWxsPiB7XHJcbiAgICBpZiAoIXRoaXMuZXZlbnRTdWIpIHtcclxuICAgICAgdGhpcy5ldmVudFN1YiA9IE9ic2VydmFibGUuY3JlYXRlKHN1YnNjcmliZXIgPT4gKHRoaXMuZW1pdHRlciA9IHN1YnNjcmliZXIpKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmV2ZW50U3ViO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKHNjaGVtYU5hbWU6IHN0cmluZywgaXRlbVRvRGVsZXRlOiBhbnksIGN1c3RvbVJlcXVlc3RJZD86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBldmVudFNvdXJjaW5nSXRlbSA9IHRoaXMuY3JlYXRlRXZlbnRTb3VyY2luZ0l0ZW0oXHJcbiAgICAgIFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5EZWxldGUsXHJcbiAgICAgIGl0ZW1Ub0RlbGV0ZSxcclxuICAgICAgc2NoZW1hTmFtZSxcclxuICAgICAgY3VzdG9tUmVxdWVzdElkXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0RXZlbnRTb3VyY2luZ1F1ZXVlKGV2ZW50U291cmNpbmdJdGVtKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUV2ZW50U291cmNpbmdJdGVtKGlkRXZlbnRTb3VyY2luZ0l0ZW0pIHtcclxuICAgIHJldHVybiB0aGlzLnBvU3RvcmFnZS5yZW1vdmVJdGVtRnJvbUFycmF5KFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZXZlbnRfc291cmNpbmdfbmFtZSwgJ2lkJywgaWRFdmVudFNvdXJjaW5nSXRlbSk7XHJcbiAgfVxyXG5cclxuICBzeW5jR2V0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBzeW5jR2V0RnVuY3Rpb24gPSBhc3luYyAoKSA9PlxyXG4gICAgICB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvbi5nZXRBbGwoKS50aGVuKHNjaGVtYXMgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYVByb21pc2VzID0gdGhpcy51cGRhdGVTdG9yYWdlU2NoZW1hcyhzY2hlbWFzKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHNjaGVtYVByb21pc2VzKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9TY2hlbWFTZXJ2aWNlLmxpbWl0ZWRDYWxsV3JhcChzeW5jR2V0RnVuY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3luY1NlbmQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IHN5bmNTZW5kRnVuY3Rpb24gPSBhc3luYyAoKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICAgICAgY29uc3QgaXRlbU9mUXVldWUgPSBhd2FpdCB0aGlzLnBvU3RvcmFnZS5nZXRGaXJzdEl0ZW0oUG9FdmVudFNvdXJjaW5nU2VydmljZS5ldmVudF9zb3VyY2luZ19uYW1lKTtcclxuXHJcbiAgICAgIGlmIChpdGVtT2ZRdWV1ZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2VsZWN0T3BlcmF0aW9uKGl0ZW1PZlF1ZXVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc3RvcHBlZFF1ZXVlRXZlbnRTb3VyY2luZyB8fCAhaXRlbU9mUXVldWUpIHtcclxuICAgICAgICB0aGlzLnN0b3BwZWRRdWV1ZUV2ZW50U291cmNpbmcgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzeW5jU2VuZEZ1bmN0aW9uKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLnBvU2NoZW1hU2VydmljZS5saW1pdGVkQ2FsbFdyYXAoc3luY1NlbmRGdW5jdGlvbik7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoc2NoZW1hTmFtZTogc3RyaW5nLCBpdGVtVXBkYXRlZDogYW55LCBjdXN0b21SZXF1ZXN0SWQ/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgZXZlbnRTb3VyY2luZ0l0ZW0gPSB0aGlzLmNyZWF0ZUV2ZW50U291cmNpbmdJdGVtKFxyXG4gICAgICBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uVXBkYXRlLFxyXG4gICAgICBpdGVtVXBkYXRlZCxcclxuICAgICAgc2NoZW1hTmFtZSxcclxuICAgICAgY3VzdG9tUmVxdWVzdElkXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0RXZlbnRTb3VyY2luZ1F1ZXVlKGV2ZW50U291cmNpbmdJdGVtKTtcclxuICB9XHJcblxyXG4gIC8qIEF2YWxpYSBzZSBvIGJvZHkgw6kgZG8gdGlwbyBGaWxlIGUgc2UgZm9yIGNvbnZlcnRlIHBhcmEgYmFzZTY0ICovXHJcbiAgcHJpdmF0ZSBhc3luYyBzZXJpYWxpemVCb2R5KHJlcXVlc3REYXRhOiBQb0h0dHBSZXF1ZXN0RGF0YSk6IFByb21pc2U8UG9IdHRwUmVxdWVzdERhdGE+IHtcclxuICAgIGxldCB7IGJvZHksIG1pbWVUeXBlLCBib2R5VHlwZSwgZmlsZU5hbWUgfSA9IHJlcXVlc3REYXRhO1xyXG5cclxuICAgIGlmIChib2R5IGluc3RhbmNlb2YgRmlsZSkge1xyXG4gICAgICBib2R5VHlwZSA9ICdGaWxlJztcclxuICAgICAgbWltZVR5cGUgPSBib2R5LnR5cGU7XHJcbiAgICAgIGZpbGVOYW1lID0gYm9keS5uYW1lO1xyXG4gICAgICBib2R5ID0gYXdhaXQgdG9CYXNlNjQoYm9keSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgLi4ucmVxdWVzdERhdGEsIGJvZHksIG1pbWVUeXBlLCBib2R5VHlwZSwgZmlsZU5hbWUgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRVcmxQYXJhbXMoc2NoZW1hOiBQb1N5bmNTY2hlbWEsIGJhc2VVcmw6IHN0cmluZywgcGFnZU51bWJlcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xyXG4gICAgcGFyYW1zLnB1c2goYCR7dGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXRQYWdlU2l6ZVBhcmFtTmFtZSgpfT0ke3NjaGVtYS5wYWdlU2l6ZX1gKTtcclxuICAgIHBhcmFtcy5wdXNoKGAke3RoaXMuY29uZmlnLmRhdGFUcmFuc2Zvcm0uZ2V0UGFnZVBhcmFtTmFtZSgpfT0ke3BhZ2VOdW1iZXJ9YCk7XHJcbiAgICByZXR1cm4gYCR7YmFzZVVybH0/JHtwYXJhbXMuam9pbignJicpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUmVjb3JkSWRFeGlzdHMocmVjb3JkSWQsIG9wZXJhdGlvbikge1xyXG4gICAgaWYgKCFyZWNvcmRJZCkge1xyXG4gICAgICBjb25zdCBlcnJvciA9IHtcclxuICAgICAgICBtZXNzYWdlOiAnSWRlbnRpZmllciBub3QgZGVmaW5lZCcsXHJcbiAgICAgICAgb3BlcmF0aW9uOiBvcGVyYXRpb25cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRocm93IG5ldyBQb0V2ZW50U291cmNpbmdFcnJvclJlc3BvbnNlKGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uY2F0UGFnZUl0ZW1zKHBhZ2VBY3VtdWxhdG9yLCByZXF1ZXN0Qm9keSk6IHsgZW50aXR5OiBzdHJpbmc7IGRhdGE6IEFycmF5PGFueT4gfSB7XHJcbiAgICBpZiAocmVxdWVzdEJvZHlbdGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXRJdGVtc0ZpZWxkTmFtZSgpXSkge1xyXG4gICAgICBwYWdlQWN1bXVsYXRvci5kYXRhID0gWy4uLnBhZ2VBY3VtdWxhdG9yLmRhdGEsIC4uLnJlcXVlc3RCb2R5W3RoaXMuY29uZmlnLmRhdGFUcmFuc2Zvcm0uZ2V0SXRlbXNGaWVsZE5hbWUoKV1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhZ2VBY3VtdWxhdG9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVFdmVudFNvdXJjaW5nSXRlbShcclxuICAgIG9wZXJhdGlvbjogUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLFxyXG4gICAgbmV3SXRlbTogYW55IHwgUG9IdHRwUmVxdWVzdERhdGEsXHJcbiAgICBzY2hlbWFOYW1lPzogc3RyaW5nLFxyXG4gICAgY3VzdG9tUmVxdWVzdElkPzogc3RyaW5nLFxyXG4gICAgaWQ/OiBudW1iZXJcclxuICApOiBQb0V2ZW50U291cmNpbmdJdGVtIHtcclxuICAgIGlmICghc2NoZW1hTmFtZSAmJiBvcGVyYXRpb24gIT09IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5IdHRwKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUG9TeW5jU2NoZW1hIGlzIG5vdCBkZWZpbmVkLicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlkOiBpZCA/IGlkIDogbmV3IERhdGUoKS5nZXRUaW1lKCksXHJcbiAgICAgIGRhdGVUaW1lOiBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcclxuICAgICAgc2NoZW1hOiBzY2hlbWFOYW1lLFxyXG4gICAgICBvcGVyYXRpb246IG9wZXJhdGlvbixcclxuICAgICAgcmVjb3JkOiBuZXdJdGVtLFxyXG4gICAgICBjdXN0b21SZXF1ZXN0SWQ6IGN1c3RvbVJlcXVlc3RJZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRXZlbnRTb3VyY2luZ0xpc3QoXHJcbiAgICBzY2hlbWFOYW1lOiBzdHJpbmcsXHJcbiAgICBldmVudExpc3Q6IEFycmF5PFBvRXZlbnRTb3VyY2luZ1N1bW1hcnlJdGVtPlxyXG4gICk6IEFycmF5PFBvRXZlbnRTb3VyY2luZ0l0ZW0+IHtcclxuICAgIHJldHVybiBldmVudExpc3QubWFwKChldmVudEl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGlkID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBpbmRleDtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUV2ZW50U291cmNpbmdJdGVtKFxyXG4gICAgICAgIGV2ZW50SXRlbS5vcGVyYXRpb24sXHJcbiAgICAgICAgZXZlbnRJdGVtLnJlY29yZCxcclxuICAgICAgICBzY2hlbWFOYW1lLFxyXG4gICAgICAgIGV2ZW50SXRlbS5jdXN0b21SZXF1ZXN0SWQsXHJcbiAgICAgICAgaWRcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVTY2hlbWFTeW5jQ29uZmlnKHNjaGVtYU5hbWUpIHtcclxuICAgIHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hTmFtZV0gPSB7XHJcbiAgICAgIHBhZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgY3VycmVudFVybERpZmY6IHVuZGVmaW5lZCxcclxuICAgICAgcmVzcG9uc2VEYXRlOiB1bmRlZmluZWRcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZU9wZXJhdGlvbihldmVudFNvdXJjaW5nSXRlbTogUG9FdmVudFNvdXJjaW5nSXRlbSk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvbi5nZXQoZXZlbnRTb3VyY2luZ0l0ZW0uc2NoZW1hKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlY29yZElkID0gZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkW3NjaGVtYS5pZEZpZWxkXTtcclxuICAgICAgdGhpcy5jaGVja1JlY29yZElkRXhpc3RzKHJlY29yZElkLCBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uRGVsZXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IHVybCA9IFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZ2V0VXJsKGV2ZW50U291cmNpbmdJdGVtLCBzY2hlbWEsIFBvUmVxdWVzdFR5cGUuREVMRVRFKTtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRTZXJ2ZXJJdGVtKHVybCwgUG9IdHRwUmVxdWVzdFR5cGUuREVMRVRFKTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlRXZlbnRTb3VyY2luZ1ZhbGlkSXRlbShyZXNwb25zZS5zdGF0dXMsIGV2ZW50U291cmNpbmdJdGVtKTtcclxuXHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlbmRSZXNwb25zZVN1YmplY3QoZXZlbnRTb3VyY2luZ0l0ZW0sIHJlc3BvbnNlKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VuZFJlc3BvbnNlU3ViamVjdChldmVudFNvdXJjaW5nSXRlbSwgZXJyb3JSZXNwb25zZSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpZmZTZXJ2ZXJJdGVtcyhjdXJyZW50VXJsRGlmZik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPE9iamVjdD4+IHtcclxuICAgIHJldHVybiB0aGlzLnBvSHR0cENsaWVudC5nZXQoY3VycmVudFVybERpZmYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCb2R5QW5kRGF0ZShzY2hlbWFOYW1lLCByZXNwb25zZSk6IGFueSB7XHJcbiAgICBjb25zdCBnZXREYXRlRmllbGROYW1lID0gdGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5nZXREYXRlRmllbGROYW1lKCk7XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2VTeW5jRGF0ZSA9IHJlc3BvbnNlLmJvZHlbZ2V0RGF0ZUZpZWxkTmFtZV07XHJcblxyXG4gICAgdGhpcy5zY2hlbWFzU3luY0NvbmZpZ1tzY2hlbWFOYW1lXVsncmVzcG9uc2VEYXRlJ10gPSByZXNwb25zZVN5bmNEYXRlO1xyXG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldFNlcnZlckRpZmZSZWNvcmRzKHNjaGVtYTogUG9TeW5jU2NoZW1hLCBiYXNlVXJsOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgaW5pdGlhbEFjdW11bGF0b3JQYWdlID0geyBlbnRpdHk6IHNjaGVtYS5uYW1lLCBkYXRhOiBbXSB9O1xyXG4gICAgY29uc3QgZGlmZlVybCA9IHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hLm5hbWVdWydjdXJyZW50VXJsRGlmZiddO1xyXG5cclxuICAgIGNvbnN0IHNlcnZlclJlc3BvbnNlID0gYXdhaXQgdGhpcy5kaWZmU2VydmVySXRlbXMoZGlmZlVybClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHRoaXMuZ2V0Qm9keUFuZERhdGUoc2NoZW1hLm5hbWUsIHJlc3BvbnNlKSksXHJcbiAgICAgICAgZXhwYW5kKGRhdGEgPT4gdGhpcy5wYWdpbmF0ZVNjaGVtYURhdGEoZGF0YSwgc2NoZW1hLCBiYXNlVXJsKSksXHJcbiAgICAgICAgcmVkdWNlKFxyXG4gICAgICAgICAgKHBhZ2VBY3VtdWxhdG9yLCByZXF1ZXN0Qm9keSkgPT4gdGhpcy5jb25jYXRQYWdlSXRlbXMocGFnZUFjdW11bGF0b3IsIHJlcXVlc3RCb2R5KSxcclxuICAgICAgICAgIGluaXRpYWxBY3VtdWxhdG9yUGFnZVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgcmV0dXJuIHNlcnZlclJlc3BvbnNlLmRhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGh0dHBPcGVyYXRpb24oZXZlbnRTb3VyY2luZ0l0ZW06IFBvRXZlbnRTb3VyY2luZ0l0ZW0pOiBQcm9taXNlPEFycmF5PFBvRXZlbnRTb3VyY2luZ0l0ZW0+IHwgbnVtYmVyPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXF1ZXN0RGF0YTogUG9IdHRwUmVxdWVzdERhdGEgPSBhd2FpdCB0aGlzLmNyZWF0ZVBvSHR0cFJlcXVlc3REYXRhKFxyXG4gICAgICAgIGV2ZW50U291cmNpbmdJdGVtLnJlY29yZC51cmwsXHJcbiAgICAgICAgZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkLm1ldGhvZCxcclxuICAgICAgICBldmVudFNvdXJjaW5nSXRlbS5yZWNvcmQsXHJcbiAgICAgICAgZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkLmhlYWRlcnNcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnBvSHR0cENsaWVudC5jcmVhdGVSZXF1ZXN0KHJlcXVlc3REYXRhKS50b1Byb21pc2UoKTtcclxuICAgICAgY29uc3QgcG9IdHRwQ29tbWFuZFJlc3BvbnNlOiBQb1N5bmNSZXNwb25zZSA9IHtcclxuICAgICAgICBpZDogZXZlbnRTb3VyY2luZ0l0ZW0uaWQsXHJcbiAgICAgICAgY3VzdG9tUmVxdWVzdElkOiBldmVudFNvdXJjaW5nSXRlbS5jdXN0b21SZXF1ZXN0SWQsXHJcbiAgICAgICAgcmVxdWVzdDogZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkLFxyXG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5yZXNwb25zZVN1YmplY3QubmV4dChwb0h0dHBDb21tYW5kUmVzcG9uc2UpO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRTb3VyY2luZ1ZhbGlkSXRlbShyZXNwb25zZS5zdGF0dXMsIGV2ZW50U291cmNpbmdJdGVtKTtcclxuICAgIH0gY2F0Y2ggKGVycm9ySHR0cENsaWVudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZW5kUmVzcG9uc2VTdWJqZWN0KGV2ZW50U291cmNpbmdJdGVtLCBlcnJvckh0dHBDbGllbnQsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBpbnNlcnRFdmVudFNvdXJjaW5nUXVldWUoZXZlbnRTb3VyY2luZ0l0ZW0pOiBQcm9taXNlPEFycmF5PFBvRXZlbnRTb3VyY2luZ0l0ZW0+PiB7XHJcbiAgICBjb25zdCBldmVudFNvdXJjaW5nVXBkYXRlZFF1ZXVlID0gYXdhaXQgdGhpcy5wb1N0b3JhZ2UuYXBwZW5kSXRlbVRvQXJyYXkoXHJcbiAgICAgIFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZXZlbnRfc291cmNpbmdfbmFtZSxcclxuICAgICAgZXZlbnRTb3VyY2luZ0l0ZW1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5ub3RpZnlFdmVudENyZWF0aW9uKCk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShldmVudFNvdXJjaW5nVXBkYXRlZFF1ZXVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaW5zZXJ0T3BlcmF0aW9uKGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbTogUG9FdmVudFNvdXJjaW5nSXRlbSk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvbi5nZXQoY3VycmVudEV2ZW50U291cmNpbmdJdGVtLnNjaGVtYSk7XHJcbiAgICBjb25zdCB1cmwgPSBQb0V2ZW50U291cmNpbmdTZXJ2aWNlLmdldFVybChjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW0sIHNjaGVtYSwgUG9SZXF1ZXN0VHlwZS5QT1NUKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFNlcnZlckl0ZW0odXJsLCBQb0h0dHBSZXF1ZXN0VHlwZS5QT1NULCBjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkKTtcclxuICAgICAgY29uc3QgcmVjb3JkVXBkYXRlZEJ5U2VydmVyID0gcmVzcG9uc2UuYm9keTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlRXZlbnRTb3VyY2luZ1ZhbGlkSXRlbShyZXNwb25zZS5zdGF0dXMsIGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSk7XHJcblxyXG4gICAgICBjb25zdCBpZCA9IGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbS5yZWNvcmRbUG9TY2hlbWFVdGlsLnN5bmNJbnRlcm5hbElkRmllbGROYW1lXTtcclxuICAgICAgYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UudXBkYXRlKHNjaGVtYSwgcmVjb3JkVXBkYXRlZEJ5U2VydmVyLCBpZCk7XHJcblxyXG4gICAgICBjb25zdCBldmVudFNvdXJjaW5nSXRlbXM6IEFycmF5PFBvRXZlbnRTb3VyY2luZ0l0ZW0+ID0gYXdhaXQgdGhpcy5wb1N0b3JhZ2UuZ2V0KFxyXG4gICAgICAgIFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZXZlbnRfc291cmNpbmdfbmFtZVxyXG4gICAgICApO1xyXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVBlbmRpbmdFdmVudFNvdXJjaW5nKFxyXG4gICAgICAgIGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSxcclxuICAgICAgICBzY2hlbWEuaWRGaWVsZCxcclxuICAgICAgICByZWNvcmRVcGRhdGVkQnlTZXJ2ZXIsXHJcbiAgICAgICAgZXZlbnRTb3VyY2luZ0l0ZW1zXHJcbiAgICAgICk7XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZW5kUmVzcG9uc2VTdWJqZWN0KGN1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSwgcmVzcG9uc2UpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3JIdHRwQ2xpZW50KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbmRSZXNwb25zZVN1YmplY3QoY3VycmVudEV2ZW50U291cmNpbmdJdGVtLCBlcnJvckh0dHBDbGllbnQsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1ZhbGlkU3RhdHVzKHN0YXR1czogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gUG9FdmVudFNvdXJjaW5nU2VydmljZS5WQUxJRF9IVFRQX1NUQVRVU19DT0RFUy5pbmNsdWRlcyhzdGF0dXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBub3RpZnlFdmVudENyZWF0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZW1pdHRlcikge1xyXG4gICAgICB0aGlzLmVtaXR0ZXIubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYWdpbmF0ZVNjaGVtYURhdGEoZGF0YSwgc2NoZW1hLCBiYXNlVXJsKTogT2JzZXJ2YWJsZTxudWxsPiB7XHJcbiAgICB0aGlzLmNvbmZpZy5kYXRhVHJhbnNmb3JtLnRyYW5zZm9ybShkYXRhKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuZGF0YVRyYW5zZm9ybS5oYXNOZXh0KCkpIHtcclxuICAgICAgdGhpcy5zY2hlbWFzU3luY0NvbmZpZ1tzY2hlbWEubmFtZV1bJ2N1cnJlbnRVcmxEaWZmJ10gPSB0aGlzLmJ1aWxkVXJsUGFyYW1zKFxyXG4gICAgICAgIHNjaGVtYSxcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgICsrdGhpcy5zY2hlbWFzU3luY0NvbmZpZ1tzY2hlbWEubmFtZV1bJ3BhZ2UnXVxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuZGlmZlNlcnZlckl0ZW1zKHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hLm5hbWVdWydjdXJyZW50VXJsRGlmZiddKS5waXBlKFxyXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiB0aGlzLmdldEJvZHlBbmREYXRlKHNjaGVtYS5uYW1lLCByZXNwb25zZSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9mKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUV2ZW50U291cmNpbmdWYWxpZEl0ZW0oXHJcbiAgICBzdGF0dXMsXHJcbiAgICBldmVudFNvdXJjaW5nSXRlbTogUG9FdmVudFNvdXJjaW5nSXRlbVxyXG4gICk6IFByb21pc2U8QXJyYXk8UG9FdmVudFNvdXJjaW5nSXRlbT4+IHtcclxuICAgIGlmICh0aGlzLmlzVmFsaWRTdGF0dXMoc3RhdHVzKSB8fCBldmVudFNvdXJjaW5nSXRlbS5vcGVyYXRpb24gPT09IFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5IdHRwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlbW92ZUV2ZW50U291cmNpbmdJdGVtKGV2ZW50U291cmNpbmdJdGVtLmlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VsZWN0T3BlcmF0aW9uKGV2ZW50U291cmNpbmdJdGVtOiBQb0V2ZW50U291cmNpbmdJdGVtKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHN3aXRjaCAoZXZlbnRTb3VyY2luZ0l0ZW0ub3BlcmF0aW9uKSB7XHJcbiAgICAgIGNhc2UgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkluc2VydDpcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnNlcnRPcGVyYXRpb24oZXZlbnRTb3VyY2luZ0l0ZW0pO1xyXG5cclxuICAgICAgY2FzZSBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uVXBkYXRlOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9wZXJhdGlvbihldmVudFNvdXJjaW5nSXRlbSk7XHJcblxyXG4gICAgICBjYXNlIFBvRXZlbnRTb3VyY2luZ09wZXJhdGlvbi5EZWxldGU6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlT3BlcmF0aW9uKGV2ZW50U291cmNpbmdJdGVtKTtcclxuXHJcbiAgICAgIGNhc2UgUG9FdmVudFNvdXJjaW5nT3BlcmF0aW9uLkh0dHA6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE9wZXJhdGlvbihldmVudFNvdXJjaW5nSXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRSZXNwb25zZVN1YmplY3QoXHJcbiAgICBldmVudFNvdXJjaW5nSXRlbTogUG9FdmVudFNvdXJjaW5nSXRlbSxcclxuICAgIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8T2JqZWN0PiB8IEh0dHBFcnJvclJlc3BvbnNlIHwgUG9FdmVudFNvdXJjaW5nRXJyb3JSZXNwb25zZSxcclxuICAgIGlzU3ViamVjdEVycm9yOiBib29sZWFuID0gZmFsc2VcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgcG9TeW5jUmVzcG9uc2U6IFBvU3luY1Jlc3BvbnNlID0ge1xyXG4gICAgICBpZDogZXZlbnRTb3VyY2luZ0l0ZW0uaWQsXHJcbiAgICAgIGN1c3RvbVJlcXVlc3RJZDogZXZlbnRTb3VyY2luZ0l0ZW0uY3VzdG9tUmVxdWVzdElkLFxyXG4gICAgICByZXF1ZXN0OiBldmVudFNvdXJjaW5nSXRlbS5yZWNvcmQsXHJcbiAgICAgIHJlc3BvbnNlOiByZXNwb25zZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3BwZWRRdWV1ZUV2ZW50U291cmNpbmcgPSBpc1N1YmplY3RFcnJvcjtcclxuICAgIHRoaXMucmVzcG9uc2VTdWJqZWN0Lm5leHQocG9TeW5jUmVzcG9uc2UpO1xyXG5cclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2VuZFNlcnZlckl0ZW0odXJsOiBzdHJpbmcsIG1ldGhvZDogUG9IdHRwUmVxdWVzdFR5cGUsIGJvZHk/OiBQb0V2ZW50U291cmNpbmdJdGVtWydyZWNvcmQnXSkge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGE6IFBvSHR0cFJlcXVlc3REYXRhID0gYXdhaXQgdGhpcy5jcmVhdGVQb0h0dHBSZXF1ZXN0RGF0YSh1cmwsIG1ldGhvZCwgYm9keSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucG9IdHRwQ2xpZW50LmNyZWF0ZVJlcXVlc3QocmVxdWVzdERhdGEpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQb0h0dHBSZXF1ZXN0RGF0YShcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgbWV0aG9kOiBQb0h0dHBSZXF1ZXN0VHlwZSxcclxuICAgIHJlY29yZD86IFBvRXZlbnRTb3VyY2luZ0l0ZW1bJ3JlY29yZCddLFxyXG4gICAgaGVhZGVycz86IEFycmF5PFBvSHR0cEhlYWRlck9wdGlvbj5cclxuICApOiBQcm9taXNlPFBvSHR0cFJlcXVlc3REYXRhPiB7XHJcbiAgICBsZXQgYm9keSA9IHJlY29yZC5ib2R5ID8/IHJlY29yZDtcclxuXHJcbiAgICBpZiAocmVjb3JkLmJvZHlUeXBlID09PSAnRmlsZScpIHtcclxuICAgICAgYm9keSA9IGF3YWl0IHRoaXMuY3JlYXRlRm9ybURhdGEoYm9keSwgcmVjb3JkLmZpbGVOYW1lLCByZWNvcmQubWltZVR5cGUsIHJlY29yZC5mb3JtRmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHVybCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNyZWF0ZUZvcm1EYXRhKFxyXG4gICAgYm9keTogc3RyaW5nLFxyXG4gICAgZmlsZU5hbWU6IHN0cmluZyxcclxuICAgIG1pbWVUeXBlOiBzdHJpbmcsXHJcbiAgICBmb3JtRmllbGQ6IHN0cmluZyA9ICdmaWxlJ1xyXG4gICk6IFByb21pc2U8Rm9ybURhdGE+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB0b0ZpbGUoYm9keSwgZmlsZU5hbWUsIG1pbWVUeXBlKTtcclxuICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cclxuICAgIGZvcm1EYXRhLmFwcGVuZChmb3JtRmllbGQsIGZpbGUsIGZpbGVOYW1lKTtcclxuICAgIHJldHVybiBmb3JtRGF0YTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlT3BlcmF0aW9uKGV2ZW50U291cmNpbmdJdGVtOiBQb0V2ZW50U291cmNpbmdJdGVtKTogUHJvbWlzZTxBcnJheTxhbnk+IHwgbnVtYmVyPiB7XHJcbiAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvbi5nZXQoZXZlbnRTb3VyY2luZ0l0ZW0uc2NoZW1hKTtcclxuICAgIGNvbnN0IHVybCA9IFBvRXZlbnRTb3VyY2luZ1NlcnZpY2UuZ2V0VXJsKGV2ZW50U291cmNpbmdJdGVtLCBzY2hlbWEsIFBvUmVxdWVzdFR5cGUuUEFUQ0gpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlY29yZElkID0gZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkW3NjaGVtYS5pZEZpZWxkXTtcclxuICAgICAgdGhpcy5jaGVja1JlY29yZElkRXhpc3RzKHJlY29yZElkLCBQb0V2ZW50U291cmNpbmdPcGVyYXRpb24uVXBkYXRlKTtcclxuXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kU2VydmVySXRlbSh1cmwsIFBvSHR0cFJlcXVlc3RUeXBlLlBVVCwgZXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZW1vdmVFdmVudFNvdXJjaW5nVmFsaWRJdGVtKHJlc3BvbnNlLnN0YXR1cywgZXZlbnRTb3VyY2luZ0l0ZW0pO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VuZFJlc3BvbnNlU3ViamVjdChldmVudFNvdXJjaW5nSXRlbSwgcmVzcG9uc2UpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3JIdHRwQ2xpZW50KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbmRSZXNwb25zZVN1YmplY3QoZXZlbnRTb3VyY2luZ0l0ZW0sIGVycm9ySHR0cENsaWVudCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBlbmRpbmdFdmVudFNvdXJjaW5nKFxyXG4gICAgY3VycmVudEV2ZW50U291cmNpbmdJdGVtOiBQb0V2ZW50U291cmNpbmdJdGVtLFxyXG4gICAgaWRGaWVsZFNjaGVtYTogc3RyaW5nLFxyXG4gICAgaW5zZXJ0ZWQ6IG9iamVjdCxcclxuICAgIGV2ZW50U291cmNpbmdJdGVtczogQXJyYXk8UG9FdmVudFNvdXJjaW5nSXRlbT5cclxuICApIHtcclxuICAgIGlmIChjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkW1BvU2NoZW1hVXRpbC5zeW5jSW50ZXJuYWxJZEZpZWxkTmFtZV0pIHtcclxuICAgICAgZXZlbnRTb3VyY2luZ0l0ZW1zLmZvckVhY2goKGV2ZW50U291cmNpbmdJdGVtLCBwb3NpdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzQ3VycmVudEV2ZW50U291cmNpbmdJdGVtID1cclxuICAgICAgICAgICFldmVudFNvdXJjaW5nSXRlbS5yZWNvcmRbaWRGaWVsZFNjaGVtYV0gJiZcclxuICAgICAgICAgIGV2ZW50U291cmNpbmdJdGVtLnJlY29yZFtQb1NjaGVtYVV0aWwuc3luY0ludGVybmFsSWRGaWVsZE5hbWVdID09PVxyXG4gICAgICAgICAgICBjdXJyZW50RXZlbnRTb3VyY2luZ0l0ZW0ucmVjb3JkW1BvU2NoZW1hVXRpbC5zeW5jSW50ZXJuYWxJZEZpZWxkTmFtZV07XHJcblxyXG4gICAgICAgIGlmIChpc0N1cnJlbnRFdmVudFNvdXJjaW5nSXRlbSkge1xyXG4gICAgICAgICAgZXZlbnRTb3VyY2luZ0l0ZW1zW3Bvc2l0aW9uXS5yZWNvcmRbaWRGaWVsZFNjaGVtYV0gPSBpbnNlcnRlZFtpZEZpZWxkU2NoZW1hXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMucG9TdG9yYWdlLnNldChQb0V2ZW50U291cmNpbmdTZXJ2aWNlLmV2ZW50X3NvdXJjaW5nX25hbWUsIGV2ZW50U291cmNpbmdJdGVtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVJlY29yZHMoc2VydmVyUmVjb3JkczogQXJyYXk8YW55Piwgc2NoZW1hOiBQb1N5bmNTY2hlbWEpIHtcclxuICAgIGZvciAoY29uc3Qgc2VydmVyUmVjb3JkIG9mIHNlcnZlclJlY29yZHMpIHtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVSZWNvcmRCeVNlcnZlclJlY29yZChzZXJ2ZXJSZWNvcmQsIHNjaGVtYSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVJlY29yZEJ5U2VydmVyUmVjb3JkKHNlcnZlclJlY29yZCwgc2NoZW1hKSB7XHJcbiAgICBjb25zdCByZWNvcmRJZCA9IHNlcnZlclJlY29yZFtzY2hlbWEuaWRGaWVsZF07XHJcbiAgICBjb25zdCBzdG9yYWdlUmVjb3JkID0gYXdhaXQgdGhpcy5wb1NjaGVtYVNlcnZpY2UuZ2V0KHNjaGVtYS5uYW1lLCByZWNvcmRJZCk7XHJcbiAgICBjb25zdCBleGlzdHNTdG9yYWdlUmVjb3JkID0gISFPYmplY3Qua2V5cyhzdG9yYWdlUmVjb3JkKS5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGV4aXN0c1N0b3JhZ2VSZWNvcmQgJiYgc2VydmVyUmVjb3JkW3NjaGVtYS5kZWxldGVkRmllbGRdKSB7XHJcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnBvU2NoZW1hU2VydmljZS5yZW1vdmUoc2NoZW1hLm5hbWUsIHNlcnZlclJlY29yZFtzY2hlbWEuaWRGaWVsZF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleGlzdHNTdG9yYWdlUmVjb3JkICYmICFzZXJ2ZXJSZWNvcmRbc2NoZW1hLmRlbGV0ZWRGaWVsZF0pIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLnVwZGF0ZShzY2hlbWEsIHNlcnZlclJlY29yZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFleGlzdHNTdG9yYWdlUmVjb3JkICYmICFzZXJ2ZXJSZWNvcmRbc2NoZW1hLmRlbGV0ZWRGaWVsZF0pIHtcclxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucG9TY2hlbWFTZXJ2aWNlLmNyZWF0ZShzY2hlbWEsIHNlcnZlclJlY29yZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0b3JhZ2VCeVNjaGVtYShzY2hlbWE6IFBvU3luY1NjaGVtYSk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLmNyZWF0ZVNjaGVtYVN5bmNDb25maWcoc2NoZW1hLm5hbWUpO1xyXG5cclxuICAgIHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hLm5hbWVdWydwYWdlJ10gPSAxO1xyXG4gICAgY29uc3QgYmFzZVVybCA9IGAke1BvU2NoZW1hVXRpbC5nZXRVcmwoc2NoZW1hLCBQb1JlcXVlc3RUeXBlLkRJRkYpfS8ke3NjaGVtYS5sYXN0U3luY31gO1xyXG4gICAgdGhpcy5zY2hlbWFzU3luY0NvbmZpZ1tzY2hlbWEubmFtZV1bJ2N1cnJlbnRVcmxEaWZmJ10gPSB0aGlzLmJ1aWxkVXJsUGFyYW1zKFxyXG4gICAgICBzY2hlbWEsXHJcbiAgICAgIGJhc2VVcmwsXHJcbiAgICAgIHRoaXMuc2NoZW1hc1N5bmNDb25maWdbc2NoZW1hLm5hbWVdWydwYWdlJ11cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2VydmVyUmVjb3JkcyA9IGF3YWl0IHRoaXMuZ2V0U2VydmVyRGlmZlJlY29yZHMoc2NoZW1hLCBiYXNlVXJsKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZVJlY29yZHMoc2VydmVyUmVjb3Jkcywgc2NoZW1hKTtcclxuXHJcbiAgICBzY2hlbWEubGFzdFN5bmMgPSB0aGlzLnNjaGVtYXNTeW5jQ29uZmlnW3NjaGVtYS5uYW1lXVsncmVzcG9uc2VEYXRlJ107XHJcbiAgICBhd2FpdCB0aGlzLnBvU2NoZW1hRGVmaW5pdGlvbi51cGRhdGUoc2NoZW1hKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU3RvcmFnZVNjaGVtYXMoc2NoZW1hcyk6IEFycmF5PFByb21pc2U8QXJyYXk8YW55Pj4+IHtcclxuICAgIHJldHVybiBzY2hlbWFzLm1hcCgoc2NoZW1hOiBQb1N5bmNTY2hlbWEpID0+IHRoaXMudXBkYXRlU3RvcmFnZUJ5U2NoZW1hKHNjaGVtYSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,148 +0,0 @@
1
- import { HttpHeaders } from '@angular/common/http';
2
- import { Injectable } from '@angular/core';
3
- import { PoHttpRequestType } from './po-http-request-type.enum';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common/http";
6
- /**
7
- * @docsPrivate
8
- *
9
- * @description
10
- *
11
- * Serviço para execução de requisições HTTP.
12
- */
13
- export class PoHttpClientService {
14
- constructor(httpClient) {
15
- this.httpClient = httpClient;
16
- }
17
- /**
18
- * Constrói uma requisição HTTP personalizada.
19
- *
20
- * @param {PoHttpRequestData} poHttpOperationData Parâmetros para a construção
21
- * da requisição.
22
- */
23
- createRequest(poHttpOperationData) {
24
- const httpHeaders = this.createHttpHeaders(poHttpOperationData.headers);
25
- return this.httpClient.request(poHttpOperationData.method, poHttpOperationData.url, {
26
- observe: 'response',
27
- headers: httpHeaders,
28
- body: poHttpOperationData.body
29
- });
30
- }
31
- /**
32
- * Constrói uma requisição com o método `delete`.
33
- *
34
- * @param {string} url URL da requisição.
35
- * @param {Array<PoHeaderOption>} httpHeaders Cabeçalhos da requisição.
36
- */
37
- delete(url, httpHeaders) {
38
- const requestData = {
39
- url: url,
40
- method: PoHttpRequestType.DELETE,
41
- headers: httpHeaders
42
- };
43
- return this.createRequest(requestData);
44
- }
45
- /**
46
- * Constrói uma requisição com o método `get`.
47
- *
48
- * @param {string} url URL da requisição.
49
- * @param {Array<PoHeaderOption>} httpHeaders Cabeçalhos da requisição.
50
- */
51
- get(url, httpHeaders) {
52
- const requestData = {
53
- url: url,
54
- method: PoHttpRequestType.GET,
55
- headers: httpHeaders
56
- };
57
- return this.createRequest(requestData);
58
- }
59
- /**
60
- * Constrói uma requisição com o método `head`.
61
- *
62
- * @param {string} url URL da requisição.
63
- * @param {Array<PoHeaderOption>} httpHeaders Cabeçalhos da requisição.
64
- */
65
- head(url, httpHeaders) {
66
- const requestData = {
67
- url: url,
68
- method: PoHttpRequestType.HEAD,
69
- headers: httpHeaders
70
- };
71
- return this.createRequest(requestData);
72
- }
73
- /**
74
- * Constrói uma requisição com o método `options`.
75
- *
76
- * @param {string} url URL da requisição.
77
- * @param {Array<PoHeaderOption>} httpHeaders Cabeçalhos da requisição.
78
- */
79
- options(url, httpHeaders) {
80
- const requestData = {
81
- url: url,
82
- method: PoHttpRequestType.OPTIONS,
83
- headers: httpHeaders
84
- };
85
- return this.createRequest(requestData);
86
- }
87
- /**
88
- * Constrói uma requisição com o método `patch`.
89
- *
90
- * @param {string} url URL da requisição.
91
- * @param {any} body Corpo da requisição.
92
- * @param {Array<PoHeaderOption>} httpHeaders Cabeçalhos da requisição.
93
- */
94
- patch(url, body, httpHeaders) {
95
- const requestData = {
96
- url: url,
97
- method: PoHttpRequestType.PATCH,
98
- headers: httpHeaders,
99
- body: body
100
- };
101
- return this.createRequest(requestData);
102
- }
103
- /**
104
- * Constrói uma requisição com o método `post`.
105
- *
106
- * @param {string} url URL da requisição.
107
- * @param {any} body Corpo da requisição.
108
- * @param {Array<PoHeaderOption>} httpHeaders Cabeçalhos da requisição.
109
- */
110
- post(url, body, httpHeaders) {
111
- const requestData = {
112
- url: url,
113
- method: PoHttpRequestType.POST,
114
- headers: httpHeaders,
115
- body: body
116
- };
117
- return this.createRequest(requestData);
118
- }
119
- /**
120
- * Constrói uma requisição com o método `put`.
121
- *
122
- * @param {string} url URL da requisição.
123
- * @param {any} body Corpo da requisição.
124
- * @param {Array<PoHeaderOption>} httpHeaders Cabeçalhos da requisição.
125
- */
126
- put(url, body, httpHeaders) {
127
- const requestData = {
128
- url: url,
129
- method: PoHttpRequestType.PUT,
130
- headers: httpHeaders,
131
- body: body
132
- };
133
- return this.createRequest(requestData);
134
- }
135
- createHttpHeaders(poHttpOperationHeaders) {
136
- let httpHeaders = new HttpHeaders();
137
- if (poHttpOperationHeaders && poHttpOperationHeaders.length > 0) {
138
- poHttpOperationHeaders.forEach(poHttpHeader => (httpHeaders = httpHeaders.append(poHttpHeader.name, poHttpHeader.value)));
139
- }
140
- return httpHeaders;
141
- }
142
- }
143
- PoHttpClientService.ɵfac = function PoHttpClientService_Factory(t) { return new (t || PoHttpClientService)(i0.ɵɵinject(i1.HttpClient)); };
144
- PoHttpClientService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PoHttpClientService, factory: PoHttpClientService.ɵfac });
145
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoHttpClientService, [{
146
- type: Injectable
147
- }], function () { return [{ type: i1.HttpClient }]; }, null); })();
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8taHR0cC1jbGllbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N5bmMvc3JjL2xpYi9zZXJ2aWNlcy9wby1odHRwLWNsaWVudC9wby1odHRwLWNsaWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxXQUFXLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBRWhFOzs7Ozs7R0FNRztBQUVILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFHLENBQUM7SUFFOUM7Ozs7O09BS0c7SUFDSCxhQUFhLENBQUMsbUJBQXNDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4RSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUU7WUFDbEYsT0FBTyxFQUFFLFVBQVU7WUFDbkIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsSUFBSSxFQUFFLG1CQUFtQixDQUFDLElBQUk7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEdBQVcsRUFBRSxXQUF1QztRQUN6RCxNQUFNLFdBQVcsR0FBc0I7WUFDckMsR0FBRyxFQUFFLEdBQUc7WUFDUixNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTTtZQUNoQyxPQUFPLEVBQUUsV0FBVztTQUNyQixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEdBQUcsQ0FBQyxHQUFXLEVBQUUsV0FBdUM7UUFDdEQsTUFBTSxXQUFXLEdBQXNCO1lBQ3JDLEdBQUcsRUFBRSxHQUFHO1lBQ1IsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEdBQUc7WUFDN0IsT0FBTyxFQUFFLFdBQVc7U0FDckIsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsR0FBVyxFQUFFLFdBQXVDO1FBQ3ZELE1BQU0sV0FBVyxHQUFzQjtZQUNyQyxHQUFHLEVBQUUsR0FBRztZQUNSLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQzlCLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLEdBQVcsRUFBRSxXQUF1QztRQUMxRCxNQUFNLFdBQVcsR0FBc0I7WUFDckMsR0FBRyxFQUFFLEdBQUc7WUFDUixNQUFNLEVBQUUsaUJBQWlCLENBQUMsT0FBTztZQUNqQyxPQUFPLEVBQUUsV0FBVztTQUNyQixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsR0FBVyxFQUFFLElBQVUsRUFBRSxXQUF1QztRQUNwRSxNQUFNLFdBQVcsR0FBc0I7WUFDckMsR0FBRyxFQUFFLEdBQUc7WUFDUixNQUFNLEVBQUUsaUJBQWlCLENBQUMsS0FBSztZQUMvQixPQUFPLEVBQUUsV0FBVztZQUNwQixJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksQ0FBQyxHQUFXLEVBQUUsSUFBVSxFQUFFLFdBQXVDO1FBQ25FLE1BQU0sV0FBVyxHQUFzQjtZQUNyQyxHQUFHLEVBQUUsR0FBRztZQUNSLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1lBQzlCLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsR0FBRyxDQUFDLEdBQVcsRUFBRSxJQUFVLEVBQUUsV0FBdUM7UUFDbEUsTUFBTSxXQUFXLEdBQXNCO1lBQ3JDLEdBQUcsRUFBRSxHQUFHO1lBQ1IsTUFBTSxFQUFFLGlCQUFpQixDQUFDLEdBQUc7WUFDN0IsT0FBTyxFQUFFLFdBQVc7WUFDcEIsSUFBSSxFQUFFLElBQUk7U0FDWCxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxzQkFBc0I7UUFDOUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUVwQyxJQUFJLHNCQUFzQixJQUFJLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0Qsc0JBQXNCLENBQUMsT0FBTyxDQUM1QixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDMUYsQ0FBQztTQUNIO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQzs7c0ZBN0lVLG1CQUFtQjt5RUFBbkIsbUJBQW1CLFdBQW5CLG1CQUFtQjt1RkFBbkIsbUJBQW1CO2NBRC9CLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBQb0h0dHBIZWFkZXJPcHRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8taHR0cC1oZWFkZXItb3B0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvSHR0cFJlcXVlc3REYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWh0dHAtcmVxdWVzdC1kYXRhLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFBvSHR0cFJlcXVlc3RUeXBlIH0gZnJvbSAnLi9wby1odHRwLXJlcXVlc3QtdHlwZS5lbnVtJztcclxuXHJcbi8qKlxyXG4gKiBAZG9jc1ByaXZhdGVcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqXHJcbiAqIFNlcnZpw6dvIHBhcmEgZXhlY3XDp8OjbyBkZSByZXF1aXNpw6fDtWVzIEhUVFAuXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBQb0h0dHBDbGllbnRTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0csOzaSB1bWEgcmVxdWlzacOnw6NvIEhUVFAgcGVyc29uYWxpemFkYS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UG9IdHRwUmVxdWVzdERhdGF9IHBvSHR0cE9wZXJhdGlvbkRhdGEgUGFyw6JtZXRyb3MgcGFyYSBhIGNvbnN0cnXDp8Ojb1xyXG4gICAqIGRhIHJlcXVpc2nDp8Ojby5cclxuICAgKi9cclxuICBjcmVhdGVSZXF1ZXN0KHBvSHR0cE9wZXJhdGlvbkRhdGE6IFBvSHR0cFJlcXVlc3REYXRhKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8T2JqZWN0Pj4ge1xyXG4gICAgY29uc3QgaHR0cEhlYWRlcnMgPSB0aGlzLmNyZWF0ZUh0dHBIZWFkZXJzKHBvSHR0cE9wZXJhdGlvbkRhdGEuaGVhZGVycyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0KHBvSHR0cE9wZXJhdGlvbkRhdGEubWV0aG9kLCBwb0h0dHBPcGVyYXRpb25EYXRhLnVybCwge1xyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICBoZWFkZXJzOiBodHRwSGVhZGVycyxcclxuICAgICAgYm9keTogcG9IdHRwT3BlcmF0aW9uRGF0YS5ib2R5XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0csOzaSB1bWEgcmVxdWlzacOnw6NvIGNvbSBvIG3DqXRvZG8gYGRlbGV0ZWAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBkYSByZXF1aXNpw6fDo28uXHJcbiAgICogQHBhcmFtIHtBcnJheTxQb0hlYWRlck9wdGlvbj59IGh0dHBIZWFkZXJzIENhYmXDp2FsaG9zIGRhIHJlcXVpc2nDp8Ojby5cclxuICAgKi9cclxuICBkZWxldGUodXJsOiBzdHJpbmcsIGh0dHBIZWFkZXJzPzogQXJyYXk8UG9IdHRwSGVhZGVyT3B0aW9uPikge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGE6IFBvSHR0cFJlcXVlc3REYXRhID0ge1xyXG4gICAgICB1cmw6IHVybCxcclxuICAgICAgbWV0aG9kOiBQb0h0dHBSZXF1ZXN0VHlwZS5ERUxFVEUsXHJcbiAgICAgIGhlYWRlcnM6IGh0dHBIZWFkZXJzXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVxdWVzdChyZXF1ZXN0RGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25zdHLDs2kgdW1hIHJlcXVpc2nDp8OjbyBjb20gbyBtw6l0b2RvIGBnZXRgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgZGEgcmVxdWlzacOnw6NvLlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8UG9IZWFkZXJPcHRpb24+fSBodHRwSGVhZGVycyBDYWJlw6dhbGhvcyBkYSByZXF1aXNpw6fDo28uXHJcbiAgICovXHJcbiAgZ2V0KHVybDogc3RyaW5nLCBodHRwSGVhZGVycz86IEFycmF5PFBvSHR0cEhlYWRlck9wdGlvbj4pIHtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhOiBQb0h0dHBSZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgdXJsOiB1cmwsXHJcbiAgICAgIG1ldGhvZDogUG9IdHRwUmVxdWVzdFR5cGUuR0VULFxyXG4gICAgICBoZWFkZXJzOiBodHRwSGVhZGVyc1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QocmVxdWVzdERhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3Ryw7NpIHVtYSByZXF1aXNpw6fDo28gY29tIG8gbcOpdG9kbyBgaGVhZGAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBkYSByZXF1aXNpw6fDo28uXHJcbiAgICogQHBhcmFtIHtBcnJheTxQb0hlYWRlck9wdGlvbj59IGh0dHBIZWFkZXJzIENhYmXDp2FsaG9zIGRhIHJlcXVpc2nDp8Ojby5cclxuICAgKi9cclxuICBoZWFkKHVybDogc3RyaW5nLCBodHRwSGVhZGVycz86IEFycmF5PFBvSHR0cEhlYWRlck9wdGlvbj4pIHtcclxuICAgIGNvbnN0IHJlcXVlc3REYXRhOiBQb0h0dHBSZXF1ZXN0RGF0YSA9IHtcclxuICAgICAgdXJsOiB1cmwsXHJcbiAgICAgIG1ldGhvZDogUG9IdHRwUmVxdWVzdFR5cGUuSEVBRCxcclxuICAgICAgaGVhZGVyczogaHR0cEhlYWRlcnNcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSZXF1ZXN0KHJlcXVlc3REYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0csOzaSB1bWEgcmVxdWlzacOnw6NvIGNvbSBvIG3DqXRvZG8gYG9wdGlvbnNgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgZGEgcmVxdWlzacOnw6NvLlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8UG9IZWFkZXJPcHRpb24+fSBodHRwSGVhZGVycyBDYWJlw6dhbGhvcyBkYSByZXF1aXNpw6fDo28uXHJcbiAgICovXHJcbiAgb3B0aW9ucyh1cmw6IHN0cmluZywgaHR0cEhlYWRlcnM/OiBBcnJheTxQb0h0dHBIZWFkZXJPcHRpb24+KSB7XHJcbiAgICBjb25zdCByZXF1ZXN0RGF0YTogUG9IdHRwUmVxdWVzdERhdGEgPSB7XHJcbiAgICAgIHVybDogdXJsLFxyXG4gICAgICBtZXRob2Q6IFBvSHR0cFJlcXVlc3RUeXBlLk9QVElPTlMsXHJcbiAgICAgIGhlYWRlcnM6IGh0dHBIZWFkZXJzXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmVxdWVzdChyZXF1ZXN0RGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25zdHLDs2kgdW1hIHJlcXVpc2nDp8OjbyBjb20gbyBtw6l0b2RvIGBwYXRjaGAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBkYSByZXF1aXNpw6fDo28uXHJcbiAgICogQHBhcmFtIHthbnl9IGJvZHkgQ29ycG8gZGEgcmVxdWlzacOnw6NvLlxyXG4gICAqIEBwYXJhbSB7QXJyYXk8UG9IZWFkZXJPcHRpb24+fSBodHRwSGVhZGVycyBDYWJlw6dhbGhvcyBkYSByZXF1aXNpw6fDo28uXHJcbiAgICovXHJcbiAgcGF0Y2godXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGh0dHBIZWFkZXJzPzogQXJyYXk8UG9IdHRwSGVhZGVyT3B0aW9uPikge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGE6IFBvSHR0cFJlcXVlc3REYXRhID0ge1xyXG4gICAgICB1cmw6IHVybCxcclxuICAgICAgbWV0aG9kOiBQb0h0dHBSZXF1ZXN0VHlwZS5QQVRDSCxcclxuICAgICAgaGVhZGVyczogaHR0cEhlYWRlcnMsXHJcbiAgICAgIGJvZHk6IGJvZHlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSZXF1ZXN0KHJlcXVlc3REYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0csOzaSB1bWEgcmVxdWlzacOnw6NvIGNvbSBvIG3DqXRvZG8gYHBvc3RgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgZGEgcmVxdWlzacOnw6NvLlxyXG4gICAqIEBwYXJhbSB7YW55fSBib2R5IENvcnBvIGRhIHJlcXVpc2nDp8Ojby5cclxuICAgKiBAcGFyYW0ge0FycmF5PFBvSGVhZGVyT3B0aW9uPn0gaHR0cEhlYWRlcnMgQ2FiZcOnYWxob3MgZGEgcmVxdWlzacOnw6NvLlxyXG4gICAqL1xyXG4gIHBvc3QodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGh0dHBIZWFkZXJzPzogQXJyYXk8UG9IdHRwSGVhZGVyT3B0aW9uPikge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGE6IFBvSHR0cFJlcXVlc3REYXRhID0ge1xyXG4gICAgICB1cmw6IHVybCxcclxuICAgICAgbWV0aG9kOiBQb0h0dHBSZXF1ZXN0VHlwZS5QT1NULFxyXG4gICAgICBoZWFkZXJzOiBodHRwSGVhZGVycyxcclxuICAgICAgYm9keTogYm9keVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QocmVxdWVzdERhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3Ryw7NpIHVtYSByZXF1aXNpw6fDo28gY29tIG8gbcOpdG9kbyBgcHV0YC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIGRhIHJlcXVpc2nDp8Ojby5cclxuICAgKiBAcGFyYW0ge2FueX0gYm9keSBDb3JwbyBkYSByZXF1aXNpw6fDo28uXHJcbiAgICogQHBhcmFtIHtBcnJheTxQb0hlYWRlck9wdGlvbj59IGh0dHBIZWFkZXJzIENhYmXDp2FsaG9zIGRhIHJlcXVpc2nDp8Ojby5cclxuICAgKi9cclxuICBwdXQodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnksIGh0dHBIZWFkZXJzPzogQXJyYXk8UG9IdHRwSGVhZGVyT3B0aW9uPikge1xyXG4gICAgY29uc3QgcmVxdWVzdERhdGE6IFBvSHR0cFJlcXVlc3REYXRhID0ge1xyXG4gICAgICB1cmw6IHVybCxcclxuICAgICAgbWV0aG9kOiBQb0h0dHBSZXF1ZXN0VHlwZS5QVVQsXHJcbiAgICAgIGhlYWRlcnM6IGh0dHBIZWFkZXJzLFxyXG4gICAgICBib2R5OiBib2R5XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJlcXVlc3QocmVxdWVzdERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVIdHRwSGVhZGVycyhwb0h0dHBPcGVyYXRpb25IZWFkZXJzKSB7XHJcbiAgICBsZXQgaHR0cEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcclxuXHJcbiAgICBpZiAocG9IdHRwT3BlcmF0aW9uSGVhZGVycyAmJiBwb0h0dHBPcGVyYXRpb25IZWFkZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgcG9IdHRwT3BlcmF0aW9uSGVhZGVycy5mb3JFYWNoKFxyXG4gICAgICAgIHBvSHR0cEhlYWRlciA9PiAoaHR0cEhlYWRlcnMgPSBodHRwSGVhZGVycy5hcHBlbmQocG9IdHRwSGVhZGVyLm5hbWUsIHBvSHR0cEhlYWRlci52YWx1ZSkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGh0dHBIZWFkZXJzO1xyXG4gIH1cclxufVxyXG4iXX0=