@experteam-mx/ngx-services 20.0.0-beta.4 → 20.0.1
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.
- package/README.md +24 -24
- package/esm2022/experteam-mx-ngx-services.mjs +5 -0
- package/esm2022/lib/apis/api-billing-do.service.mjs +41 -0
- package/esm2022/lib/apis/api-billing-gt.service.mjs +61 -0
- package/esm2022/lib/apis/api-billing-mx.service.mjs +62 -0
- package/esm2022/lib/apis/api-billing-pa.service.mjs +105 -0
- package/esm2022/lib/apis/api-billing-sv.service.mjs +83 -0
- package/esm2022/lib/apis/api-cash-operations.service.mjs +93 -0
- package/esm2022/lib/apis/api-catalogs.service.mjs +626 -0
- package/esm2022/lib/apis/api-companies.service.mjs +1031 -0
- package/esm2022/lib/apis/api-composition.service.mjs +55 -0
- package/esm2022/lib/apis/api-customs.service.mjs +157 -0
- package/esm2022/lib/apis/api-discounts.service.mjs +243 -0
- package/esm2022/lib/apis/api-e-tools-auto-billing.service.mjs +75 -0
- package/esm2022/lib/apis/api-events.service.mjs +53 -0
- package/esm2022/lib/apis/api-external-pickups.service.mjs +74 -0
- package/esm2022/lib/apis/api-inventories.service.mjs +208 -0
- package/esm2022/lib/apis/api-invoices.service.mjs +398 -0
- package/esm2022/lib/apis/api-notifications.service.mjs +104 -0
- package/esm2022/lib/apis/api-open-items.service.mjs +62 -0
- package/esm2022/lib/apis/api-reports.service.mjs +172 -0
- package/esm2022/lib/apis/api-security.service.mjs +245 -0
- package/esm2022/lib/apis/api-services.service.mjs +93 -0
- package/esm2022/lib/apis/api-shipments.service.mjs +116 -0
- package/esm2022/lib/apis/api-supplies.service.mjs +133 -0
- package/esm2022/lib/apis/models/api-billing-do.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-billing-do.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-billing-mx.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-billing-mx.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-billing-pa.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-billing-pa.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-billing-sv.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-billing-sv.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-billing.models.mjs +2 -0
- package/esm2022/lib/apis/models/api-cash-operations.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-cash-operations.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-catalog.enum.mjs +9 -0
- package/esm2022/lib/apis/models/api-catalog.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-catalog.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-companies.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-companies.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-composition.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-composition.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-customs.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-customs.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-discounts.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-discounts.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-e-tools-auto-billing.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-e-tools-auto-billing.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-events.enum.mjs +7 -0
- package/esm2022/lib/apis/models/api-events.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-events.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-external-pickups.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-inventories.enum.mjs +22 -0
- package/esm2022/lib/apis/models/api-inventories.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-inventories.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-invoices.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-invoices.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-notifications.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-notifications.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-open-items.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-open-items.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-reports.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-reports.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-security.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-security.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-services.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-services.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-shipments.enums.mjs +8 -0
- package/esm2022/lib/apis/models/api-shipments.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-shipments.types.mjs +2 -0
- package/esm2022/lib/apis/models/api-supplies.interfaces.mjs +2 -0
- package/esm2022/lib/apis/models/api-supplies.types.mjs +2 -0
- package/esm2022/lib/apis/models/api.models.mjs +2 -0
- package/esm2022/lib/cypher/crypto.service.mjs +93 -0
- package/esm2022/lib/helpers/files.mjs +9 -0
- package/esm2022/lib/helpers/http.mjs +66 -0
- package/esm2022/lib/interceptors/api-headers.interceptor.mjs +24 -0
- package/esm2022/lib/interceptors/api-token.interceptor.mjs +28 -0
- package/esm2022/lib/interceptors/http-caching.interceptor.mjs +37 -0
- package/esm2022/lib/ngx-services.models.mjs +11 -0
- package/esm2022/lib/ngx-services.module.mjs +33 -0
- package/esm2022/lib/websockets/web-sockets.service.mjs +115 -0
- package/esm2022/public-api.mjs +90 -0
- package/fesm2022/experteam-mx-ngx-services.mjs +126 -5
- package/fesm2022/experteam-mx-ngx-services.mjs.map +1 -1
- package/index.d.ts +287 -4
- package/lib/apis/api-billing-do.service.d.ts +24 -0
- package/lib/apis/api-billing-gt.service.d.ts +38 -0
- package/lib/apis/api-billing-mx.service.d.ts +39 -0
- package/lib/apis/api-billing-pa.service.d.ts +68 -0
- package/lib/apis/api-billing-sv.service.d.ts +55 -0
- package/lib/apis/api-cash-operations.service.d.ts +62 -0
- package/lib/apis/api-catalogs.service.d.ts +458 -0
- package/lib/apis/api-companies.service.d.ts +714 -0
- package/lib/apis/api-composition.service.d.ts +35 -0
- package/lib/apis/api-customs.service.d.ts +110 -0
- package/lib/apis/api-discounts.service.d.ts +167 -0
- package/lib/apis/api-e-tools-auto-billing.service.d.ts +49 -0
- package/lib/apis/api-events.service.d.ts +33 -0
- package/lib/apis/api-external-pickups.service.d.ts +46 -0
- package/lib/apis/api-inventories.service.d.ts +145 -0
- package/lib/apis/api-invoices.service.d.ts +280 -0
- package/lib/apis/api-notifications.service.d.ts +70 -0
- package/lib/apis/api-open-items.service.d.ts +41 -0
- package/lib/apis/api-reports.service.d.ts +120 -0
- package/lib/apis/api-security.service.d.ts +162 -0
- package/lib/apis/api-services.service.d.ts +61 -0
- package/lib/apis/api-shipments.service.d.ts +77 -0
- package/lib/apis/api-supplies.service.d.ts +93 -0
- package/lib/apis/models/api-billing-do.interfaces.d.ts +6 -0
- package/lib/apis/models/api-billing-do.types.d.ts +5 -0
- package/lib/apis/models/api-billing-mx.interfaces.d.ts +21 -0
- package/lib/apis/models/api-billing-mx.types.d.ts +13 -0
- package/lib/apis/models/api-billing-pa.interfaces.d.ts +26 -0
- package/lib/apis/models/api-billing-pa.types.d.ts +16 -0
- package/lib/apis/models/api-billing-sv.interfaces.d.ts +22 -0
- package/lib/apis/models/api-billing-sv.types.d.ts +21 -0
- package/lib/apis/models/api-billing.models.d.ts +27 -0
- package/lib/apis/models/api-cash-operations.interfaces.d.ts +40 -0
- package/lib/apis/models/api-cash-operations.types.d.ts +30 -0
- package/lib/apis/models/api-catalog.enum.d.ts +7 -0
- package/lib/apis/models/api-catalog.interfaces.d.ts +219 -0
- package/lib/apis/models/api-catalog.types.d.ts +217 -0
- package/lib/apis/models/api-companies.interfaces.d.ts +341 -0
- package/lib/apis/models/api-companies.types.d.ts +457 -0
- package/lib/apis/models/api-composition.interfaces.d.ts +272 -0
- package/lib/apis/models/api-composition.types.d.ts +9 -0
- package/lib/apis/models/api-customs.interfaces.d.ts +125 -0
- package/lib/apis/models/api-customs.types.d.ts +90 -0
- package/lib/apis/models/api-discounts.interfaces.d.ts +78 -0
- package/lib/apis/models/api-discounts.types.d.ts +89 -0
- package/lib/apis/models/api-e-tools-auto-billing.interfaces.d.ts +45 -0
- package/lib/apis/models/api-e-tools-auto-billing.types.d.ts +30 -0
- package/lib/apis/models/api-events.enum.d.ts +5 -0
- package/lib/apis/models/api-events.interfaces.d.ts +21 -0
- package/lib/apis/models/api-events.types.d.ts +14 -0
- package/lib/apis/models/api-external-pickups.types.d.ts +31 -0
- package/lib/apis/models/api-inventories.enum.d.ts +18 -0
- package/lib/apis/models/api-inventories.interfaces.d.ts +40 -0
- package/lib/apis/models/api-inventories.types.d.ts +62 -0
- package/lib/apis/models/api-invoices.interfaces.d.ts +267 -0
- package/lib/apis/models/api-invoices.types.d.ts +195 -0
- package/lib/apis/models/api-notifications.interfaces.d.ts +36 -0
- package/lib/apis/models/api-notifications.types.d.ts +34 -0
- package/lib/apis/models/api-open-items.interfaces.d.ts +32 -0
- package/lib/apis/models/api-open-items.types.d.ts +58 -0
- package/lib/apis/models/api-reports.interfaces.d.ts +342 -0
- package/lib/apis/models/api-reports.types.d.ts +59 -0
- package/lib/apis/models/api-security.interfaces.d.ts +68 -0
- package/lib/apis/models/api-security.types.d.ts +72 -0
- package/lib/apis/models/api-services.interfaces.d.ts +43 -0
- package/lib/apis/models/api-services.types.d.ts +57 -0
- package/lib/apis/models/api-shipments.enums.d.ts +6 -0
- package/lib/apis/models/api-shipments.interfaces.d.ts +41 -0
- package/lib/apis/models/api-shipments.types.d.ts +121 -0
- package/lib/apis/models/api-supplies.interfaces.d.ts +40 -0
- package/lib/apis/models/api-supplies.types.d.ts +50 -0
- package/lib/apis/models/api.models.d.ts +36 -0
- package/lib/cypher/crypto.service.d.ts +15 -0
- package/lib/helpers/files.d.ts +2 -0
- package/lib/helpers/http.d.ts +38 -0
- package/lib/interceptors/api-headers.interceptor.d.ts +12 -0
- package/lib/interceptors/api-token.interceptor.d.ts +11 -0
- package/lib/interceptors/http-caching.interceptor.d.ts +12 -0
- package/lib/ngx-services.models.d.ts +62 -0
- package/lib/ngx-services.module.d.ts +16 -0
- package/lib/websockets/web-sockets.service.d.ts +49 -0
- package/package.json +1 -1
- package/public-api.d.ts +80 -0
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
export class ApiInvoicesService {
|
|
6
|
+
environments;
|
|
7
|
+
http;
|
|
8
|
+
constructor(environments, http) {
|
|
9
|
+
this.environments = environments;
|
|
10
|
+
this.http = http;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Retrieves the API URL for invoices from the environments configuration.
|
|
14
|
+
*
|
|
15
|
+
* @return {string} The API URL for invoices.
|
|
16
|
+
*/
|
|
17
|
+
get url() {
|
|
18
|
+
return this.environments.apiInvoicesUrl ?? '';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Sends an operation document to the server and processes the response.
|
|
22
|
+
*
|
|
23
|
+
* @param {OperationDocumentIn} body - The input data for the operation document.
|
|
24
|
+
* @return {Observable<OperationDocumentOut>} An observable containing the processed operation document output.
|
|
25
|
+
*/
|
|
26
|
+
postOperationDocument(body) {
|
|
27
|
+
return this.http.post(`${this.url}/operation/document`, body)
|
|
28
|
+
.pipe(map(({ data }) => data));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Fetches and returns the collection receipt data for a given collection ID.
|
|
32
|
+
*
|
|
33
|
+
* @param {number} id - The unique identifier of the collection for which the receipt needs to be retrieved.
|
|
34
|
+
* @return {Observable<PrintCollectionReceiptOut>} An observable containing the collection receipt data.
|
|
35
|
+
*/
|
|
36
|
+
getPrintCollectionReceipt(id) {
|
|
37
|
+
return this.http.get(`${this.url}/operation/print/collection-receipt/${id}`)
|
|
38
|
+
.pipe(map(({ data }) => data));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Handles the account payment operation by sending a POST request to the specified endpoint.
|
|
42
|
+
* Processes the response and returns the operation data.
|
|
43
|
+
*
|
|
44
|
+
* @param {OperationAccountPaymentIn} body The payload containing information for the account payment operation.
|
|
45
|
+
* @return {Observable<OperationAccountPaymentOut>} An observable emitting the processed account payment operation data.
|
|
46
|
+
*/
|
|
47
|
+
postOperationAccountPayment(body) {
|
|
48
|
+
return this.http.post(`${this.url}/operation/account-payment`, body)
|
|
49
|
+
.pipe(map(({ data }) => data));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Cancels a payment receipt based on the provided input.
|
|
53
|
+
* This method sends a POST request to cancel a document.
|
|
54
|
+
*
|
|
55
|
+
* @param body The data required to cancel the payment receipt, encapsulated in a CancelPaymentReceiptIn object.
|
|
56
|
+
* @return An Observable representing the result of the cancellation. Emits an empty object on success.
|
|
57
|
+
*/
|
|
58
|
+
postOperationCancelDocument(body) {
|
|
59
|
+
return this.http.post(`${this.url}/operation/cancel-document`, body)
|
|
60
|
+
.pipe(map(({ data }) => data));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Sends a POST request to cancel billing for a specific operation.
|
|
64
|
+
*
|
|
65
|
+
* @param {Object} params - The parameters for the cancellation request.
|
|
66
|
+
* @param {string} params.invoiceId - The ID of the invoice to be canceled.
|
|
67
|
+
* @param {Object} params.body - Additional data to be sent in the request body.
|
|
68
|
+
* @return {Observable<OperationCancelBillingOut>} An observable emitting the result of the cancellation operation.
|
|
69
|
+
*/
|
|
70
|
+
postOperationCancelBilling({ invoiceId, ...body }) {
|
|
71
|
+
return this.http.post(`${this.url}/operation/cancel-billing/${invoiceId}`, body)
|
|
72
|
+
.pipe(map(({ data }) => data));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Fetches a list of customer types from the server.
|
|
76
|
+
*
|
|
77
|
+
* @param {QueryParams} params - Query parameters to filter or customize the request.
|
|
78
|
+
* @return {Observable<CustomerTypesOut>} An observable emitting the customer types fetched from the server.
|
|
79
|
+
*/
|
|
80
|
+
getCustomerTypes(params) {
|
|
81
|
+
return this.http.get(`${this.url}/customer-types`, { params })
|
|
82
|
+
.pipe(map(({ data }) => data));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Retrieves document types specific to a given country.
|
|
86
|
+
*
|
|
87
|
+
* @param {QueryParams} params - The query parameters containing country-specific information.
|
|
88
|
+
* @return {Observable<CustomerDocumentTypesOut>} An observable emitting the document types available for the specified country.
|
|
89
|
+
*/
|
|
90
|
+
getCustomerDocumentTypes(params) {
|
|
91
|
+
return this.http.get(`${this.url}/customer-country-document-types`, { params })
|
|
92
|
+
.pipe(map(({ data }) => data));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Fetches customer invoice details filtered by a custom invoice type.
|
|
96
|
+
*
|
|
97
|
+
* @param {InvoiceTypeCustomParamsIn} params - An object containing the filter parameters for the custom invoice type.
|
|
98
|
+
* @return {Observable<CustomersOut>} An observable containing customer invoice details of the specified type.
|
|
99
|
+
*/
|
|
100
|
+
getCustomers(params) {
|
|
101
|
+
return this.http.get(`${this.url}/customers`, { params })
|
|
102
|
+
.pipe(map(({ data }) => data));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Sends a POST request to create or update an external shipment operation.
|
|
106
|
+
*
|
|
107
|
+
* @param {OperationShipmentExternalIn} params - The input parameters for the external shipment operation.
|
|
108
|
+
* @return {Observable<OperationShipmentExternalOut>} An observable that emits the result of the external shipment operation.
|
|
109
|
+
*/
|
|
110
|
+
postOperationShipmentExternal(params) {
|
|
111
|
+
return this.http.post(`${this.url}/operation/shipment/external`, params)
|
|
112
|
+
.pipe(map(({ data }) => data));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Processes an external payment operation for a shipment.
|
|
116
|
+
*
|
|
117
|
+
* @param {OperationShipmentExternalIn} params - The input parameters required for the external payment operation.
|
|
118
|
+
* @return {Observable<OperationShipmentExternalOut>} An observable that emits the result of the external payment operation for a shipment.
|
|
119
|
+
*/
|
|
120
|
+
postOperationShipmentExternalPayment(params) {
|
|
121
|
+
return this.http.post(`${this.url}/operation/shipment/external/payment`, params)
|
|
122
|
+
.pipe(map(({ data }) => data));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Retrieves and returns billing operation print details for a given document ID.
|
|
126
|
+
*
|
|
127
|
+
* @param {number} documentId - The ID of the document for which to fetch the print billing operation details.
|
|
128
|
+
* @return {Observable<OperationPrintDocumentOut>} An observable emitting the print billing operation details for the specified document.
|
|
129
|
+
*/
|
|
130
|
+
getOperationPrintDocument(documentId) {
|
|
131
|
+
return this.http.get(`${this.url}/operation/print/document/${documentId}`)
|
|
132
|
+
.pipe(map(({ data }) => data));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Fetches all country payment types.
|
|
136
|
+
*
|
|
137
|
+
* @param {QueryParams} params - Query parameters to filter or customize the request.
|
|
138
|
+
* @return {Observable<CountryPaymentTypesOut>} An observable emitting the country payment types fetched from the server.
|
|
139
|
+
*/
|
|
140
|
+
getCountryPaymentTypes(params) {
|
|
141
|
+
return this.http.get(`${this.url}/country-payment-types`, { params })
|
|
142
|
+
.pipe(map(({ data }) => data));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Updates an existing country payment type.
|
|
146
|
+
*
|
|
147
|
+
* @param {number} id - The ID of the country payment type to update.
|
|
148
|
+
* @param {CountryPaymentTypeIn} body - The updated data for the country payment type.
|
|
149
|
+
* @returns {Observable<CountryPaymentTypeOut>} An observable that emits the result of the update operation.
|
|
150
|
+
*/
|
|
151
|
+
putCountryPaymentType(id, body) {
|
|
152
|
+
return this.http.put(`${this.url}/country-payment-types/${id}`, body)
|
|
153
|
+
.pipe(map(({ data }) => data));
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Delete an existing country payment type.
|
|
157
|
+
*
|
|
158
|
+
* @param {number} id - The unique identifier of the country payment type to be deleted.
|
|
159
|
+
* @returns {Observable<CountryPaymentTypeOut>} An observable that emits the result of the delete operation.
|
|
160
|
+
*/
|
|
161
|
+
deleteCountryPaymentType(id) {
|
|
162
|
+
return this.http.delete(`${this.url}/country-payment-types/${id}`)
|
|
163
|
+
.pipe(map(({ data }) => data));
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Create a new country payment type resource.
|
|
167
|
+
*
|
|
168
|
+
* @param {CountryPaymentTypeIn} body - The input parameters required for create a new country payment type.
|
|
169
|
+
* @return {Observable<CountryPaymentTypeOut>} An observable that emits the result of create operation.
|
|
170
|
+
*/
|
|
171
|
+
postCountryPaymentType(body) {
|
|
172
|
+
return this.http.post(`${this.url}/country-payment-types`, body)
|
|
173
|
+
.pipe(map(({ data }) => data));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Retrieves and returns a country payment type for a given ID.
|
|
177
|
+
*
|
|
178
|
+
* @param {number} id - The ID of the country payment type.
|
|
179
|
+
* @return {Observable<CountryPaymentTypeOut>} An observable that emits the result of show operation.
|
|
180
|
+
*/
|
|
181
|
+
getCountryPaymentType(id) {
|
|
182
|
+
return this.http.get(`${this.url}/country-payment-types/${id}`)
|
|
183
|
+
.pipe(map(({ data }) => data));
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Fetches all country payment type fields.
|
|
187
|
+
*
|
|
188
|
+
* @param {QueryParams} params - Query parameters to filter or customize the request.
|
|
189
|
+
* @return {Observable<CountryPaymentTypeFieldsOut>} An observable emitting the country payment type fields fetched from the server.
|
|
190
|
+
*/
|
|
191
|
+
getCountryPaymentTypeFields(params) {
|
|
192
|
+
return this.http.get(`${this.url}/country-payment-type-fields`, { params })
|
|
193
|
+
.pipe(map(({ data }) => data));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Create a new country payment type field resource.
|
|
197
|
+
*
|
|
198
|
+
* @param {CountryPaymentTypeFieldIn} body - The input parameters required for create a new country payment type field.
|
|
199
|
+
* @return {Observable<CountryPaymentTypeFieldOut>} An observable that emits the result of create operation.
|
|
200
|
+
*/
|
|
201
|
+
postCountryPaymentTypeField(body) {
|
|
202
|
+
return this.http.post(`${this.url}/country-payment-type-fields`, body)
|
|
203
|
+
.pipe(map(({ data }) => data));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Updates an existing country payment type field.
|
|
207
|
+
*
|
|
208
|
+
* @param {number} id - The ID of the country payment type field to update.
|
|
209
|
+
* @param {CountryPaymentTypeFieldIn} body - The updated data for the country payment type field.
|
|
210
|
+
* @returns {Observable<CountryPaymentTypeFieldOut>} An observable that emits the result of the update operation.
|
|
211
|
+
*/
|
|
212
|
+
putCountryPaymentTypeField(id, body) {
|
|
213
|
+
return this.http.put(`${this.url}/country-payment-type-fields/${id}`, body)
|
|
214
|
+
.pipe(map(({ data }) => data));
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Fetches all payment types.
|
|
218
|
+
*
|
|
219
|
+
* @param {QueryParams} params - Query parameters to filter or customize the request.
|
|
220
|
+
* @return {Observable<PaymentTypesOut>} An observable emitting the payment types fetched from the server.
|
|
221
|
+
*/
|
|
222
|
+
getPaymentTypes(params) {
|
|
223
|
+
return this.http.get(`${this.url}/payment-types`, { params })
|
|
224
|
+
.pipe(map(({ data }) => data));
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Fetches all payment type fields card.
|
|
228
|
+
*
|
|
229
|
+
* @param {QueryParams} params - Query parameters to filter or customize the request.
|
|
230
|
+
* @return {Observable<PaymentTypeFieldCardTypesOut>} An observable emitting the payment type fields card fetched from the server.
|
|
231
|
+
*/
|
|
232
|
+
getPaymentTypeFieldCardTypes(params) {
|
|
233
|
+
return this.http.get(`${this.url}/payment-type-field-card-types`, { params })
|
|
234
|
+
.pipe(map(({ data }) => data));
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Create a new payment type field card resource.
|
|
238
|
+
*
|
|
239
|
+
* @param {PaymentTypeFieldCardTypeIn} body - The input parameters required for create a new payment type field card.
|
|
240
|
+
* @return {Observable<PaymentTypeFieldCardTypeOut>} An observable that emits the result of create operation.
|
|
241
|
+
*/
|
|
242
|
+
postCountryPaymentTypeFieldCardType(body) {
|
|
243
|
+
return this.http.post(`${this.url}/payment-type-field-card-types`, body)
|
|
244
|
+
.pipe(map(({ data }) => data));
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Updates an existing payment type field card.
|
|
248
|
+
*
|
|
249
|
+
* @param {number} id - The ID of the payment type field card to update.
|
|
250
|
+
* @param {PaymentTypeFieldCardTypeIn} body - The updated data for the payment type field card.
|
|
251
|
+
* @returns {Observable<PaymentTypeFieldCardTypeOut>} An observable that emits the result of the update operation.
|
|
252
|
+
*/
|
|
253
|
+
putCountryPaymentTypeFieldCardType(id, body) {
|
|
254
|
+
return this.http.put(`${this.url}/payment-type-field-card-types/${id}`, body)
|
|
255
|
+
.pipe(map(({ data }) => data));
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Fetches all payment type fields accounts.
|
|
259
|
+
*
|
|
260
|
+
* @param {QueryParams} params - Query parameters to filter or customize the request.
|
|
261
|
+
* @return {Observable<PaymentTypeFieldAccountsOut>} An observable emitting the payment type fields accounts fetched from the server.
|
|
262
|
+
*/
|
|
263
|
+
getPaymentTypeFieldAccounts(params) {
|
|
264
|
+
return this.http.get(`${this.url}/payment-type-field-accounts`, { params })
|
|
265
|
+
.pipe(map(({ data }) => data));
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Create a new payment type field account resource.
|
|
269
|
+
*
|
|
270
|
+
* @param {PaymentTypeFieldAccountIn} body - The input parameters required for create a new payment type field account.
|
|
271
|
+
* @return {Observable<PaymentTypeFieldAccountOut>} An observable that emits the result of create operation.
|
|
272
|
+
*/
|
|
273
|
+
postCountryPaymentTypeFieldAccount(body) {
|
|
274
|
+
return this.http.post(`${this.url}/payment-type-field-accounts`, body)
|
|
275
|
+
.pipe(map(({ data }) => data));
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Updates an existing payment type field account.
|
|
279
|
+
*
|
|
280
|
+
* @param {number} id - The ID of the payment type field account to update.
|
|
281
|
+
* @param {PaymentTypeFieldAccountIn} body - The updated data for the payment type field account.
|
|
282
|
+
* @returns {Observable<PaymentTypeFieldAccountOut>} An observable that emits the result of the update operation.
|
|
283
|
+
*/
|
|
284
|
+
putCountryPaymentTypeFieldAccount(id, body) {
|
|
285
|
+
return this.http.put(`${this.url}/payment-type-field-accounts/${id}`, body)
|
|
286
|
+
.pipe(map(({ data }) => data));
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Fetches tolerance data from the server based on the provided query parameters.
|
|
290
|
+
*
|
|
291
|
+
* @param {QueryParams} params - The parameters to use for querying tolerances.
|
|
292
|
+
* @return {Observable<TolerancesOut>} An observable emitting the tolerance data.
|
|
293
|
+
*/
|
|
294
|
+
getTolerances(params) {
|
|
295
|
+
return this.http.get(`${this.url}/tolerances`, { params })
|
|
296
|
+
.pipe(map(({ data }) => data));
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Retrieves the tolerance detail for a given identifier.
|
|
300
|
+
*
|
|
301
|
+
* @param {number} id - The unique identifier for the tolerance to retrieve.
|
|
302
|
+
* @return {Observable<ToleranceOut>} An observable containing the tolerance data.
|
|
303
|
+
*/
|
|
304
|
+
getTolerance(id) {
|
|
305
|
+
return this.http.get(`${this.url}/tolerances/${id}`)
|
|
306
|
+
.pipe(map(({ data }) => data));
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Sends a request to update or create a tolerance record using the provided data.
|
|
310
|
+
*
|
|
311
|
+
* @param {ToleranceIn} body - The tolerance input object containing the data to be sent in the request.
|
|
312
|
+
* @return {Observable<ToleranceOut>} An observable that emits the updated or created tolerance output object.
|
|
313
|
+
*/
|
|
314
|
+
postTolerance(body) {
|
|
315
|
+
return this.http.post(`${this.url}/tolerances`, body)
|
|
316
|
+
.pipe(map(({ data }) => data));
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Updates the tolerance with the specified ID using the provided data.
|
|
320
|
+
*
|
|
321
|
+
* @param {number} id - The unique identifier of the tolerance to update.
|
|
322
|
+
* @param {ToleranceIn} body - The data to update the tolerance with.
|
|
323
|
+
* @return {Observable<ToleranceOut>} An observable containing the updated tolerance information.
|
|
324
|
+
*/
|
|
325
|
+
putTolerance(id, body) {
|
|
326
|
+
return this.http.put(`${this.url}/tolerances/${id}`, body)
|
|
327
|
+
.pipe(map(({ data }) => data));
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Deletes the tolerance entry corresponding to the given ID.
|
|
331
|
+
*
|
|
332
|
+
* @param {number} id - The unique identifier of the tolerance to be deleted.
|
|
333
|
+
* @return {Observable<{}>} An Observable that emits the result of the delete operation.
|
|
334
|
+
*/
|
|
335
|
+
deleteTolerance(id) {
|
|
336
|
+
return this.http.delete(`${this.url}/tolerances/${id}`)
|
|
337
|
+
.pipe(map(({ data }) => data));
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Retrieves the document requests associated with a document ID.
|
|
341
|
+
*
|
|
342
|
+
* @param id - The unique identifier for the document.
|
|
343
|
+
* @returns An observable that emits the document requests data.
|
|
344
|
+
*/
|
|
345
|
+
getOperationDocumentRequests(id) {
|
|
346
|
+
return this.http.get(`${this.url}/operation/document/requests/${id}`)
|
|
347
|
+
.pipe(map(({ data }) => data));
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Retrieves a list of documents based on the provided query parameters.
|
|
351
|
+
*
|
|
352
|
+
* @param params - The query parameters to filter and paginate the documents
|
|
353
|
+
* @returns An Observable that emits the documents data when the HTTP request completes
|
|
354
|
+
*/
|
|
355
|
+
getDocuments(params) {
|
|
356
|
+
return this.http.get(`${this.url}/documents`, { params })
|
|
357
|
+
.pipe(map(({ data }) => data));
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Fetches document status values from the API.
|
|
361
|
+
*
|
|
362
|
+
* Sends an HTTP GET request to the service's `/document-status` endpoint using the supplied query parameters
|
|
363
|
+
* and returns the decoded `data` payload from the API success envelope.
|
|
364
|
+
*
|
|
365
|
+
* @param params - Query parameters to apply to the request (e.g. filtering, pagination, search).
|
|
366
|
+
* @returns An Observable that emits a DocumentStatusesOut object containing the document status data.
|
|
367
|
+
*/
|
|
368
|
+
getDocumentStatuses(params) {
|
|
369
|
+
return this.http.get(`${this.url}/document-status`, { params })
|
|
370
|
+
.pipe(map(({ data }) => data));
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Retrieves the XML print representation for a given operation (invoice).
|
|
374
|
+
*
|
|
375
|
+
* Sends an HTTP GET request to the backend endpoint `/operation/print/xml/{documentId}` and
|
|
376
|
+
* unwraps the `data` field from the API success response before emitting it.
|
|
377
|
+
*
|
|
378
|
+
* @param documentId - The numeric identifier of the document to fetch.
|
|
379
|
+
* @returns An Observable that emits the OperationPrintXmlOut payload on success and completes.
|
|
380
|
+
* The Observable will error if the HTTP request fails or the response does not contain the expected data.
|
|
381
|
+
*/
|
|
382
|
+
getOperationPrintXml(documentId) {
|
|
383
|
+
return this.http.get(`${this.url}/operation/print/xml/${documentId}`)
|
|
384
|
+
.pipe(map(({ data }) => data));
|
|
385
|
+
}
|
|
386
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiInvoicesService, deps: [{ token: 'env' }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
387
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiInvoicesService, providedIn: 'root' });
|
|
388
|
+
}
|
|
389
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiInvoicesService, decorators: [{
|
|
390
|
+
type: Injectable,
|
|
391
|
+
args: [{
|
|
392
|
+
providedIn: 'root'
|
|
393
|
+
}]
|
|
394
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
395
|
+
type: Inject,
|
|
396
|
+
args: ['env']
|
|
397
|
+
}] }, { type: i1.HttpClient }] });
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWludm9pY2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcnRlYW0tbXgvbmd4LXNlcnZpY2VzL3NyYy9saWIvYXBpcy9hcGktaW52b2ljZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFBOzs7QUEyQ3RDLE1BQU0sT0FBTyxrQkFBa0I7SUFFSjtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUE7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUUsSUFBeUI7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBbUMsR0FBRyxJQUFJLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxJQUFJLENBQUM7YUFDNUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUJBQXlCLENBQUUsRUFBVTtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF3QyxHQUFHLElBQUksQ0FBQyxHQUFHLHVDQUF1QyxFQUFFLEVBQUUsQ0FBQzthQUNoSCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFD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LEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQzt3R0E5WlUsa0JBQWtCLGtCQUVuQixLQUFLOzRHQUZKLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vbmd4LXNlcnZpY2VzLm1vZGVscydcclxuaW1wb3J0IHtcclxuICBDYW5jZWxQYXltZW50UmVjZWlwdEluLFxyXG4gIENvdW50cnlQYXltZW50VHlwZUZpZWxkSW4sXHJcbiAgQ291bnRyeVBheW1lbnRUeXBlRmllbGRPdXQsXHJcbiAgQ291bnRyeVBheW1lbnRUeXBlRmllbGRzT3V0LFxyXG4gIENvdW50cnlQYXltZW50VHlwZUluLFxyXG4gIENvdW50cnlQYXltZW50VHlwZU91dCxcclxuICBDb3VudHJ5UGF5bWVudFR5cGVzT3V0LFxyXG4gIEN1c3RvbWVyRG9jdW1lbnRUeXBlc091dCxcclxuICBDdXN0b21lcnNPdXQsXHJcbiAgQ3VzdG9tZXJUeXBlc091dCxcclxuICBEb2N1bWVudFN0YXR1c2VzT3V0LFxyXG4gIEdldERvY3VtZW50c091dCxcclxuICBPcGVyYXRpb25BY2NvdW50UGF5bWVudEluLFxyXG4gIE9wZXJhdGlvbkFjY291bnRQYXltZW50T3V0LFxyXG4gIE9wZXJhdGlvbkNhbmNlbEJpbGxpbmdJbixcclxuICBPcGVyYXRpb25DYW5jZWxCaWxsaW5nT3V0LFxyXG4gIE9wZXJhdGlvbkRvY3VtZW50SW4sXHJcbiAgT3BlcmF0aW9uRG9jdW1lbnRPdXQsXHJcbiAgT3BlcmF0aW9uRG9jdW1lbnRSZXF1ZXN0c091dCxcclxuICBPcGVyYXRpb25QcmludERvY3VtZW50T3V0LFxyXG4gIE9wZXJhdGlvblByaW50WG1sT3V0LFxyXG4gIE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxJbixcclxuICBPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0LFxyXG4gIFBheW1lbnRUeXBlRmllbGRBY2NvdW50SW4sXHJcbiAgUGF5bWVudFR5cGVGaWVsZEFjY291bnRPdXQsXHJcbiAgUGF5bWVudFR5cGVGaWVsZEFjY291bnRzT3V0LFxyXG4gIFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZUluLFxyXG4gIFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZU91dCxcclxuICBQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVzT3V0LFxyXG4gIFBheW1lbnRUeXBlc091dCxcclxuICBQcmludENvbGxlY3Rpb25SZWNlaXB0T3V0LFxyXG4gIFRvbGVyYW5jZUluLFxyXG4gIFRvbGVyYW5jZU91dCxcclxuICBUb2xlcmFuY2VzT3V0LFxyXG59IGZyb20gJy4vbW9kZWxzL2FwaS1pbnZvaWNlcy50eXBlcydcclxuaW1wb3J0IHsgQXBpU3VjY2VzcywgUXVlcnlQYXJhbXMgfSBmcm9tICcuL21vZGVscy9hcGkubW9kZWxzJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBpSW52b2ljZXNTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvciAoXHJcbiAgICBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudmlyb25tZW50czogRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIEFQSSBVUkwgZm9yIGludm9pY2VzIGZyb20gdGhlIGVudmlyb25tZW50cyBjb25maWd1cmF0aW9uLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgQVBJIFVSTCBmb3IgaW52b2ljZXMuXHJcbiAgICovXHJcbiAgZ2V0IHVybCAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50cy5hcGlJbnZvaWNlc1VybCA/PyAnJ1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYW4gb3BlcmF0aW9uIGRvY3VtZW50IHRvIHRoZSBzZXJ2ZXIgYW5kIHByb2Nlc3NlcyB0aGUgcmVzcG9uc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09wZXJhdGlvbkRvY3VtZW50SW59IGJvZHkgLSBUaGUgaW5wdXQgZGF0YSBmb3IgdGhlIG9wZXJhdGlvbiBkb2N1bWVudC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9wZXJhdGlvbkRvY3VtZW50T3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBwcm9jZXNzZWQgb3BlcmF0aW9uIGRvY3VtZW50IG91dHB1dC5cclxuICAgKi9cclxuICBwb3N0T3BlcmF0aW9uRG9jdW1lbnQgKGJvZHk6IE9wZXJhdGlvbkRvY3VtZW50SW4pOiBPYnNlcnZhYmxlPE9wZXJhdGlvbkRvY3VtZW50T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxPcGVyYXRpb25Eb2N1bWVudE91dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vZG9jdW1lbnRgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgYW5kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gcmVjZWlwdCBkYXRhIGZvciBhIGdpdmVuIGNvbGxlY3Rpb24gSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbGxlY3Rpb24gZm9yIHdoaWNoIHRoZSByZWNlaXB0IG5lZWRzIHRvIGJlIHJldHJpZXZlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFByaW50Q29sbGVjdGlvblJlY2VpcHRPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGNvbGxlY3Rpb24gcmVjZWlwdCBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFByaW50Q29sbGVjdGlvblJlY2VpcHQgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFByaW50Q29sbGVjdGlvblJlY2VpcHRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UHJpbnRDb2xsZWN0aW9uUmVjZWlwdE91dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vcHJpbnQvY29sbGVjdGlvbi1yZWNlaXB0LyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBhY2NvdW50IHBheW1lbnQgb3BlcmF0aW9uIGJ5IHNlbmRpbmcgYSBQT1NUIHJlcXVlc3QgdG8gdGhlIHNwZWNpZmllZCBlbmRwb2ludC5cclxuICAgKiBQcm9jZXNzZXMgdGhlIHJlc3BvbnNlIGFuZCByZXR1cm5zIHRoZSBvcGVyYXRpb24gZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uQWNjb3VudFBheW1lbnRJbn0gYm9keSBUaGUgcGF5bG9hZCBjb250YWluaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgYWNjb3VudCBwYXltZW50IG9wZXJhdGlvbi5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9wZXJhdGlvbkFjY291bnRQYXltZW50T3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcHJvY2Vzc2VkIGFjY291bnQgcGF5bWVudCBvcGVyYXRpb24gZGF0YS5cclxuICAgKi9cclxuICBwb3N0T3BlcmF0aW9uQWNjb3VudFBheW1lbnQgKGJvZHk6IE9wZXJhdGlvbkFjY291bnRQYXltZW50SW4pOiBPYnNlcnZhYmxlPE9wZXJhdGlvbkFjY291bnRQYXltZW50T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxPcGVyYXRpb25BY2NvdW50UGF5bWVudE91dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vYWNjb3VudC1wYXltZW50YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWxzIGEgcGF5bWVudCByZWNlaXB0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbnB1dC5cclxuICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjYW5jZWwgYSBkb2N1bWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBib2R5IFRoZSBkYXRhIHJlcXVpcmVkIHRvIGNhbmNlbCB0aGUgcGF5bWVudCByZWNlaXB0LCBlbmNhcHN1bGF0ZWQgaW4gYSBDYW5jZWxQYXltZW50UmVjZWlwdEluIG9iamVjdC5cclxuICAgKiBAcmV0dXJuIEFuIE9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIGNhbmNlbGxhdGlvbi4gRW1pdHMgYW4gZW1wdHkgb2JqZWN0IG9uIHN1Y2Nlc3MuXHJcbiAgICovXHJcbiAgcG9zdE9wZXJhdGlvbkNhbmNlbERvY3VtZW50IChib2R5OiBDYW5jZWxQYXltZW50UmVjZWlwdEluKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vb3BlcmF0aW9uL2NhbmNlbC1kb2N1bWVudGAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY2FuY2VsIGJpbGxpbmcgZm9yIGEgc3BlY2lmaWMgb3BlcmF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2FuY2VsbGF0aW9uIHJlcXVlc3QuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5pbnZvaWNlSWQgLSBUaGUgSUQgb2YgdGhlIGludm9pY2UgdG8gYmUgY2FuY2VsZWQuXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcy5ib2R5IC0gQWRkaXRpb25hbCBkYXRhIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9wZXJhdGlvbkNhbmNlbEJpbGxpbmdPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSByZXN1bHQgb2YgdGhlIGNhbmNlbGxhdGlvbiBvcGVyYXRpb24uXHJcbiAgICovXHJcbiAgcG9zdE9wZXJhdGlvbkNhbmNlbEJpbGxpbmcgKHsgaW52b2ljZUlkLCAuLi5ib2R5IH06IE9wZXJhdGlvbkNhbmNlbEJpbGxpbmdJbik6IE9ic2VydmFibGU8T3BlcmF0aW9uQ2FuY2VsQmlsbGluZ091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8T3BlcmF0aW9uQ2FuY2VsQmlsbGluZ091dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vY2FuY2VsLWJpbGxpbmcvJHtpbnZvaWNlSWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGEgbGlzdCBvZiBjdXN0b21lciB0eXBlcyBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBvciBjdXN0b21pemUgdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDdXN0b21lclR5cGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgY3VzdG9tZXIgdHlwZXMgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZ2V0Q3VzdG9tZXJUeXBlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q3VzdG9tZXJUeXBlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDdXN0b21lclR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L2N1c3RvbWVyLXR5cGVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgZG9jdW1lbnQgdHlwZXMgc3BlY2lmaWMgdG8gYSBnaXZlbiBjb3VudHJ5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgY29udGFpbmluZyBjb3VudHJ5LXNwZWNpZmljIGluZm9ybWF0aW9uLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3VzdG9tZXJEb2N1bWVudFR5cGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgZG9jdW1lbnQgdHlwZXMgYXZhaWxhYmxlIGZvciB0aGUgc3BlY2lmaWVkIGNvdW50cnkuXHJcbiAgICovXHJcbiAgZ2V0Q3VzdG9tZXJEb2N1bWVudFR5cGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDdXN0b21lckRvY3VtZW50VHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q3VzdG9tZXJEb2N1bWVudFR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L2N1c3RvbWVyLWNvdW50cnktZG9jdW1lbnQtdHlwZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgY3VzdG9tZXIgaW52b2ljZSBkZXRhaWxzIGZpbHRlcmVkIGJ5IGEgY3VzdG9tIGludm9pY2UgdHlwZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SW52b2ljZVR5cGVDdXN0b21QYXJhbXNJbn0gcGFyYW1zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlciBwYXJhbWV0ZXJzIGZvciB0aGUgY3VzdG9tIGludm9pY2UgdHlwZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEN1c3RvbWVyc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyBjdXN0b21lciBpbnZvaWNlIGRldGFpbHMgb2YgdGhlIHNwZWNpZmllZCB0eXBlLlxyXG4gICAqL1xyXG4gIGdldEN1c3RvbWVycyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q3VzdG9tZXJzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEN1c3RvbWVyc091dD4+KGAke3RoaXMudXJsfS9jdXN0b21lcnNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBvciB1cGRhdGUgYW4gZXh0ZXJuYWwgc2hpcG1lbnQgb3BlcmF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsSW59IHBhcmFtcyAtIFRoZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgZXh0ZXJuYWwgc2hpcG1lbnQgb3BlcmF0aW9uLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbE91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBleHRlcm5hbCBzaGlwbWVudCBvcGVyYXRpb24uXHJcbiAgICovXHJcbiAgcG9zdE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWwgKHBhcmFtczogT3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbEluKTogT2JzZXJ2YWJsZTxPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9zaGlwbWVudC9leHRlcm5hbGAsIHBhcmFtcylcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzZXMgYW4gZXh0ZXJuYWwgcGF5bWVudCBvcGVyYXRpb24gZm9yIGEgc2hpcG1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxJbn0gcGFyYW1zIC0gVGhlIGlucHV0IHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIHRoZSBleHRlcm5hbCBwYXltZW50IG9wZXJhdGlvbi5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiB0aGUgZXh0ZXJuYWwgcGF5bWVudCBvcGVyYXRpb24gZm9yIGEgc2hpcG1lbnQuXHJcbiAgICovXHJcbiAgcG9zdE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxQYXltZW50IChwYXJhbXM6IE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxJbik6IE9ic2VydmFibGU8T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbE91dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vc2hpcG1lbnQvZXh0ZXJuYWwvcGF5bWVudGAsIHBhcmFtcylcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW5kIHJldHVybnMgYmlsbGluZyBvcGVyYXRpb24gcHJpbnQgZGV0YWlscyBmb3IgYSBnaXZlbiBkb2N1bWVudCBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkb2N1bWVudElkIC0gVGhlIElEIG9mIHRoZSBkb2N1bWVudCBmb3Igd2hpY2ggdG8gZmV0Y2ggdGhlIHByaW50IGJpbGxpbmcgb3BlcmF0aW9uIGRldGFpbHMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcGVyYXRpb25QcmludERvY3VtZW50T3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcHJpbnQgYmlsbGluZyBvcGVyYXRpb24gZGV0YWlscyBmb3IgdGhlIHNwZWNpZmllZCBkb2N1bWVudC5cclxuICAgKi9cclxuICBnZXRPcGVyYXRpb25QcmludERvY3VtZW50IChkb2N1bWVudElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPE9wZXJhdGlvblByaW50RG9jdW1lbnRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8T3BlcmF0aW9uUHJpbnREb2N1bWVudE91dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vcHJpbnQvZG9jdW1lbnQvJHtkb2N1bWVudElkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBhbGwgY291bnRyeSBwYXltZW50IHR5cGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gUXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgb3IgY3VzdG9taXplIHRoZSByZXF1ZXN0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlc091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGNvdW50cnkgcGF5bWVudCB0eXBlcyBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgKi9cclxuICBnZXRDb3VudHJ5UGF5bWVudFR5cGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvdW50cnlQYXltZW50VHlwZXNPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1wYXltZW50LXR5cGVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIGNvdW50cnkgcGF5bWVudCB0eXBlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSBjb3VudHJ5IHBheW1lbnQgdHlwZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtDb3VudHJ5UGF5bWVudFR5cGVJbn0gYm9keSAtIFRoZSB1cGRhdGVkIGRhdGEgZm9yIHRoZSBjb3VudHJ5IHBheW1lbnQgdHlwZS5cclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiB0aGUgdXBkYXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwdXRDb3VudHJ5UGF5bWVudFR5cGUgKGlkOiBudW1iZXIsIGJvZHk6IENvdW50cnlQYXltZW50VHlwZUluKTogT2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q291bnRyeVBheW1lbnRUeXBlT3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcGF5bWVudC10eXBlcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGFuIGV4aXN0aW5nIGNvdW50cnkgcGF5bWVudCB0eXBlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb3VudHJ5IHBheW1lbnQgdHlwZSB0byBiZSBkZWxldGVkLlxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBkZWxldGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIGRlbGV0ZUNvdW50cnlQYXltZW50VHlwZSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxBcGlTdWNjZXNzPENvdW50cnlQYXltZW50VHlwZU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXBheW1lbnQtdHlwZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBjb3VudHJ5IHBheW1lbnQgdHlwZSByZXNvdXJjZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q291bnRyeVBheW1lbnRUeXBlSW59IGJvZHkgLSBUaGUgaW5wdXQgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgY3JlYXRlIGEgbmV3IGNvdW50cnkgcGF5bWVudCB0eXBlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgY3JlYXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwb3N0Q291bnRyeVBheW1lbnRUeXBlIChib2R5OiBDb3VudHJ5UGF5bWVudFR5cGVJbik6IE9ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1wYXltZW50LXR5cGVzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW5kIHJldHVybnMgYSBjb3VudHJ5IHBheW1lbnQgdHlwZSBmb3IgYSBnaXZlbiBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgY291bnRyeSBwYXltZW50IHR5cGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiBzaG93IG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBnZXRDb3VudHJ5UGF5bWVudFR5cGUgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb3VudHJ5UGF5bWVudFR5cGVPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1wYXltZW50LXR5cGVzLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGFsbCBjb3VudHJ5IHBheW1lbnQgdHlwZSBmaWVsZHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBvciBjdXN0b21pemUgdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVGaWVsZHNPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBjb3VudHJ5IHBheW1lbnQgdHlwZSBmaWVsZHMgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZ2V0Q291bnRyeVBheW1lbnRUeXBlRmllbGRzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDb3VudHJ5UGF5bWVudFR5cGVGaWVsZHNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q291bnRyeVBheW1lbnRUeXBlRmllbGRzT3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcGF5bWVudC10eXBlLWZpZWxkc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IGNvdW50cnkgcGF5bWVudCB0eXBlIGZpZWxkIHJlc291cmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDb3VudHJ5UGF5bWVudFR5cGVGaWVsZElufSBib2R5IC0gVGhlIGlucHV0IHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIGNyZWF0ZSBhIG5ldyBjb3VudHJ5IHBheW1lbnQgdHlwZSBmaWVsZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZUZpZWxkT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgY3JlYXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwb3N0Q291bnRyeVBheW1lbnRUeXBlRmllbGQgKGJvZHk6IENvdW50cnlQYXltZW50VHlwZUZpZWxkSW4pOiBPYnNlcnZhYmxlPENvdW50cnlQYXltZW50VHlwZUZpZWxkT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxDb3VudHJ5UGF5bWVudFR5cGVGaWVsZE91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXBheW1lbnQtdHlwZS1maWVsZHNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgY291bnRyeSBwYXltZW50IHR5cGUgZmllbGQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIGNvdW50cnkgcGF5bWVudCB0eXBlIGZpZWxkIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge0NvdW50cnlQYXltZW50VHlwZUZpZWxkSW59IGJvZHkgLSBUaGUgdXBkYXRlZCBkYXRhIGZvciB0aGUgY291bnRyeSBwYXltZW50IHR5cGUgZmllbGQuXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlRmllbGRPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiB0aGUgdXBkYXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwdXRDb3VudHJ5UGF5bWVudFR5cGVGaWVsZCAoaWQ6IG51bWJlciwgYm9keTogQ291bnRyeVBheW1lbnRUeXBlRmllbGRJbik6IE9ic2VydmFibGU8Q291bnRyeVBheW1lbnRUeXBlRmllbGRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q291bnRyeVBheW1lbnRUeXBlRmllbGRPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1wYXltZW50LXR5cGUtZmllbGRzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGFsbCBwYXltZW50IHR5cGVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gUXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgb3IgY3VzdG9taXplIHRoZSByZXF1ZXN0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UGF5bWVudFR5cGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcGF5bWVudCB0eXBlcyBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgKi9cclxuICBnZXRQYXltZW50VHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFBheW1lbnRUeXBlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQYXltZW50VHlwZXNPdXQ+PihgJHt0aGlzLnVybH0vcGF5bWVudC10eXBlc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBhbGwgcGF5bWVudCB0eXBlIGZpZWxkcyBjYXJkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gUXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgb3IgY3VzdG9taXplIHRoZSByZXF1ZXN0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlc091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHBheW1lbnQgdHlwZSBmaWVsZHMgY2FyZCBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgKi9cclxuICBnZXRQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZXNPdXQ+PihgJHt0aGlzLnVybH0vcGF5bWVudC10eXBlLWZpZWxkLWNhcmQtdHlwZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBwYXltZW50IHR5cGUgZmllbGQgY2FyZCByZXNvdXJjZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlSW59IGJvZHkgLSBUaGUgaW5wdXQgcGFyYW1ldGVycyByZXF1aXJlZCBmb3IgY3JlYXRlIGEgbmV3IHBheW1lbnQgdHlwZSBmaWVsZCBjYXJkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgY3JlYXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwb3N0Q291bnRyeVBheW1lbnRUeXBlRmllbGRDYXJkVHlwZSAoYm9keTogUGF5bWVudFR5cGVGaWVsZENhcmRUeXBlSW4pOiBPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlT3V0Pj4oYCR7dGhpcy51cmx9L3BheW1lbnQtdHlwZS1maWVsZC1jYXJkLXR5cGVzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIHBheW1lbnQgdHlwZSBmaWVsZCBjYXJkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSBwYXltZW50IHR5cGUgZmllbGQgY2FyZCB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVJbn0gYm9keSAtIFRoZSB1cGRhdGVkIGRhdGEgZm9yIHRoZSBwYXltZW50IHR5cGUgZmllbGQgY2FyZC5cclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiB0aGUgdXBkYXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwdXRDb3VudHJ5UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlIChpZDogbnVtYmVyLCBib2R5OiBQYXltZW50VHlwZUZpZWxkQ2FyZFR5cGVJbik6IE9ic2VydmFibGU8UGF5bWVudFR5cGVGaWVsZENhcmRUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFBheW1lbnRUeXBlRmllbGRDYXJkVHlwZU91dD4+KGAke3RoaXMudXJsfS9wYXltZW50LXR5cGUtZmllbGQtY2FyZC10eXBlcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBhbGwgcGF5bWVudCB0eXBlIGZpZWxkcyBhY2NvdW50cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIG9yIGN1c3RvbWl6ZSB0aGUgcmVxdWVzdC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRBY2NvdW50c091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHBheW1lbnQgdHlwZSBmaWVsZHMgYWNjb3VudHMgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZ2V0UGF5bWVudFR5cGVGaWVsZEFjY291bnRzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxQYXltZW50VHlwZUZpZWxkQWNjb3VudHNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UGF5bWVudFR5cGVGaWVsZEFjY291bnRzT3V0Pj4oYCR7dGhpcy51cmx9L3BheW1lbnQtdHlwZS1maWVsZC1hY2NvdW50c2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IHBheW1lbnQgdHlwZSBmaWVsZCBhY2NvdW50IHJlc291cmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtQYXltZW50VHlwZUZpZWxkQWNjb3VudElufSBib2R5IC0gVGhlIGlucHV0IHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIGNyZWF0ZSBhIG5ldyBwYXltZW50IHR5cGUgZmllbGQgYWNjb3VudC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRBY2NvdW50T3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgY3JlYXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBwb3N0Q291bnRyeVBheW1lbnRUeXBlRmllbGRBY2NvdW50IChib2R5OiBQYXltZW50VHlwZUZpZWxkQWNjb3VudEluKTogT2JzZXJ2YWJsZTxQYXltZW50VHlwZUZpZWxkQWNjb3VudE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8UGF5bWVudFR5cGVGaWVsZEFjY291bnRPdXQ+PihgJHt0aGlzLnVybH0vcGF5bWVudC10eXBlLWZpZWxkLWFjY291bnRzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIHBheW1lbnQgdHlwZSBmaWVsZCBhY2NvdW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSBwYXltZW50IHR5cGUgZmllbGQgYWNjb3VudCB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtQYXltZW50VHlwZUZpZWxkQWNjb3VudElufSBib2R5IC0gVGhlIHVwZGF0ZWQgZGF0YSBmb3IgdGhlIHBheW1lbnQgdHlwZSBmaWVsZCBhY2NvdW50LlxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFBheW1lbnRUeXBlRmllbGRBY2NvdW50T3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgdGhlIHVwZGF0ZSBvcGVyYXRpb24uXHJcbiAgICovXHJcbiAgcHV0Q291bnRyeVBheW1lbnRUeXBlRmllbGRBY2NvdW50IChpZDogbnVtYmVyLCBib2R5OiBQYXltZW50VHlwZUZpZWxkQWNjb3VudEluKTogT2JzZXJ2YWJsZTxQYXltZW50VHlwZUZpZWxkQWNjb3VudE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxQYXltZW50VHlwZUZpZWxkQWNjb3VudE91dD4+KGAke3RoaXMudXJsfS9wYXltZW50LXR5cGUtZmllbGQtYWNjb3VudHMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdG9sZXJhbmNlIGRhdGEgZnJvbSB0aGUgc2VydmVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gdXNlIGZvciBxdWVyeWluZyB0b2xlcmFuY2VzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VG9sZXJhbmNlc091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHRvbGVyYW5jZSBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFRvbGVyYW5jZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFRvbGVyYW5jZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8VG9sZXJhbmNlc091dD4+KGAke3RoaXMudXJsfS90b2xlcmFuY2VzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIHRvbGVyYW5jZSBkZXRhaWwgZm9yIGEgZ2l2ZW4gaWRlbnRpZmllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRvbGVyYW5jZSB0byByZXRyaWV2ZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRvbGVyYW5jZU91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdG9sZXJhbmNlIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0VG9sZXJhbmNlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxUb2xlcmFuY2VPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8VG9sZXJhbmNlT3V0Pj4oYCR7dGhpcy51cmx9L3RvbGVyYW5jZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgcmVxdWVzdCB0byB1cGRhdGUgb3IgY3JlYXRlIGEgdG9sZXJhbmNlIHJlY29yZCB1c2luZyB0aGUgcHJvdmlkZWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VG9sZXJhbmNlSW59IGJvZHkgLSBUaGUgdG9sZXJhbmNlIGlucHV0IG9iamVjdCBjb250YWluaW5nIHRoZSBkYXRhIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxUb2xlcmFuY2VPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgb3IgY3JlYXRlZCB0b2xlcmFuY2Ugb3V0cHV0IG9iamVjdC5cclxuICAgKi9cclxuICBwb3N0VG9sZXJhbmNlIChib2R5OiBUb2xlcmFuY2VJbik6IE9ic2VydmFibGU8VG9sZXJhbmNlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxUb2xlcmFuY2VPdXQ+PihgJHt0aGlzLnVybH0vdG9sZXJhbmNlc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgdG9sZXJhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBJRCB1c2luZyB0aGUgcHJvdmlkZWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgdG9sZXJhbmNlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge1RvbGVyYW5jZUlufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSB0b2xlcmFuY2Ugd2l0aC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFRvbGVyYW5jZU91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCB0b2xlcmFuY2UgaW5mb3JtYXRpb24uXHJcbiAgICovXHJcbiAgcHV0VG9sZXJhbmNlIChpZDogbnVtYmVyLCBib2R5OiBUb2xlcmFuY2VJbik6IE9ic2VydmFibGU8VG9sZXJhbmNlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFRvbGVyYW5jZU91dD4+KGAke3RoaXMudXJsfS90b2xlcmFuY2VzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIHRoZSB0b2xlcmFuY2UgZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHRvbGVyYW5jZSB0byBiZSBkZWxldGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8e30+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiB0aGUgZGVsZXRlIG9wZXJhdGlvbi5cclxuICAgKi9cclxuICBkZWxldGVUb2xlcmFuY2UgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHt9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxBcGlTdWNjZXNzPHt9Pj4oYCR7dGhpcy51cmx9L3RvbGVyYW5jZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgZG9jdW1lbnQgcmVxdWVzdHMgYXNzb2NpYXRlZCB3aXRoIGEgZG9jdW1lbnQgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBkb2N1bWVudC5cclxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGRvY3VtZW50IHJlcXVlc3RzIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0T3BlcmF0aW9uRG9jdW1lbnRSZXF1ZXN0cyAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8T3BlcmF0aW9uRG9jdW1lbnRSZXF1ZXN0c091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxPcGVyYXRpb25Eb2N1bWVudFJlcXVlc3RzT3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9kb2N1bWVudC9yZXF1ZXN0cy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBkb2N1bWVudHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIGFuZCBwYWdpbmF0ZSB0aGUgZG9jdW1lbnRzXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBkb2N1bWVudHMgZGF0YSB3aGVuIHRoZSBIVFRQIHJlcXVlc3QgY29tcGxldGVzXHJcbiAgICovXHJcbiAgZ2V0RG9jdW1lbnRzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxHZXREb2N1bWVudHNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8R2V0RG9jdW1lbnRzT3V0Pj4oYCR7dGhpcy51cmx9L2RvY3VtZW50c2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBkb2N1bWVudCBzdGF0dXMgdmFsdWVzIGZyb20gdGhlIEFQSS5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgR0VUIHJlcXVlc3QgdG8gdGhlIHNlcnZpY2UncyBgL2RvY3VtZW50LXN0YXR1c2AgZW5kcG9pbnQgdXNpbmcgdGhlIHN1cHBsaWVkIHF1ZXJ5IHBhcmFtZXRlcnNcclxuICAgKiBhbmQgcmV0dXJucyB0aGUgZGVjb2RlZCBgZGF0YWAgcGF5bG9hZCBmcm9tIHRoZSBBUEkgc3VjY2VzcyBlbnZlbG9wZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0IChlLmcuIGZpbHRlcmluZywgcGFnaW5hdGlvbiwgc2VhcmNoKS5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYSBEb2N1bWVudFN0YXR1c2VzT3V0IG9iamVjdCBjb250YWluaW5nIHRoZSBkb2N1bWVudCBzdGF0dXMgZGF0YS5cclxuICAgKi9cclxuICBnZXREb2N1bWVudFN0YXR1c2VzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxEb2N1bWVudFN0YXR1c2VzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPERvY3VtZW50U3RhdHVzZXNPdXQ+PihgJHt0aGlzLnVybH0vZG9jdW1lbnQtc3RhdHVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIFhNTCBwcmludCByZXByZXNlbnRhdGlvbiBmb3IgYSBnaXZlbiBvcGVyYXRpb24gKGludm9pY2UpLlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBHRVQgcmVxdWVzdCB0byB0aGUgYmFja2VuZCBlbmRwb2ludCBgL29wZXJhdGlvbi9wcmludC94bWwve2RvY3VtZW50SWR9YCBhbmRcclxuICAgKiB1bndyYXBzIHRoZSBgZGF0YWAgZmllbGQgZnJvbSB0aGUgQVBJIHN1Y2Nlc3MgcmVzcG9uc2UgYmVmb3JlIGVtaXR0aW5nIGl0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgLSBUaGUgbnVtZXJpYyBpZGVudGlmaWVyIG9mIHRoZSBkb2N1bWVudCB0byBmZXRjaC5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIE9wZXJhdGlvblByaW50WG1sT3V0IHBheWxvYWQgb24gc3VjY2VzcyBhbmQgY29tcGxldGVzLlxyXG4gICAqICAgICAgICAgIFRoZSBPYnNlcnZhYmxlIHdpbGwgZXJyb3IgaWYgdGhlIEhUVFAgcmVxdWVzdCBmYWlscyBvciB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiB0aGUgZXhwZWN0ZWQgZGF0YS5cclxuICAgKi9cclxuICBnZXRPcGVyYXRpb25QcmludFhtbCAoZG9jdW1lbnRJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxPcGVyYXRpb25QcmludFhtbE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxPcGVyYXRpb25QcmludFhtbE91dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vcHJpbnQveG1sLyR7ZG9jdW1lbnRJZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { map } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
export class ApiNotificationsService {
|
|
6
|
+
environments;
|
|
7
|
+
http;
|
|
8
|
+
constructor(environments, http) {
|
|
9
|
+
this.environments = environments;
|
|
10
|
+
this.http = http;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Retrieves the URL for the notifications API from the environment settings.
|
|
14
|
+
* If the URL is not defined, an empty string is returned.
|
|
15
|
+
*
|
|
16
|
+
* @return {string} The API Notifications URL or an empty string if not defined.
|
|
17
|
+
*/
|
|
18
|
+
get url() {
|
|
19
|
+
return this.environments.apiNotificationsUrl ?? '';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Retrieves notifications based on the provided query parameters.
|
|
23
|
+
*
|
|
24
|
+
* @param {QueryParams} params - The query parameters used to filter and retrieve notifications.
|
|
25
|
+
* @return {Observable<NotificationsOut>} An observable that emits the fetched notifications.
|
|
26
|
+
*/
|
|
27
|
+
getNotifications(params) {
|
|
28
|
+
return this.http.get(`${this.url}/notifications`, { params })
|
|
29
|
+
.pipe(map(({ data }) => data));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Sends a notification request to the server using the provided body.
|
|
33
|
+
*
|
|
34
|
+
* @param {NotificationIn} body - The notification data to be sent in the request body.
|
|
35
|
+
* @return {Observable<NotificationOut>} An observable emitting the response containing the notification output data.
|
|
36
|
+
*/
|
|
37
|
+
postNotification(body) {
|
|
38
|
+
return this.http.post(`${this.url}/notifications`, { body })
|
|
39
|
+
.pipe(map(({ data }) => data));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Sends a PUT request to update a notification with the provided ID and body.
|
|
43
|
+
*
|
|
44
|
+
* @param {number} id - The unique identifier of the notification to be updated.
|
|
45
|
+
* @param {NotificationIn} body - The data to update the notification with.
|
|
46
|
+
* @return {Observable<NotificationOut>} An observable containing the updated notification data.
|
|
47
|
+
*/
|
|
48
|
+
putNotification(id, body) {
|
|
49
|
+
return this.http.put(`${this.url}/notifications/${id}`, { body })
|
|
50
|
+
.pipe(map(({ data }) => data));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Deletes a notification by its unique identifier.
|
|
54
|
+
*
|
|
55
|
+
* @param {number} id - The unique identifier of the notification to delete.
|
|
56
|
+
* @return {Observable<{}>} An observable that emits the response after deleting the notification.
|
|
57
|
+
*/
|
|
58
|
+
deleteNotification(id) {
|
|
59
|
+
return this.http.delete(`${this.url}/notifications/${id}`)
|
|
60
|
+
.pipe(map(({ data }) => data));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Marks the notification as finished for the specified notification ID.
|
|
64
|
+
*
|
|
65
|
+
* @param {number} id - The unique identifier of the notification to be marked as finished.
|
|
66
|
+
* @return {Observable<NotificationOut>} An Observable emitting the updated notification object.
|
|
67
|
+
*/
|
|
68
|
+
putNotificationFinish(id) {
|
|
69
|
+
return this.http.put(`${this.url}/notifications/finish/${id}`, {})
|
|
70
|
+
.pipe(map(({ data }) => data));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Sends a POST request to create or update notification configurations.
|
|
74
|
+
*
|
|
75
|
+
* @param {NotificationConfigurationIn} body - The notification configuration payload to be sent in the request.
|
|
76
|
+
* @return {Observable<NotificationConfigurationOut>} An observable emitting the response containing the created or updated notification configuration.
|
|
77
|
+
*/
|
|
78
|
+
postNotificationConfigurations(body) {
|
|
79
|
+
return this.http.post(`${this.url}/notification-configurations`, { body })
|
|
80
|
+
.pipe(map(({ data }) => data));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Retrieves the notification types based on the provided query parameters.
|
|
84
|
+
*
|
|
85
|
+
* @param {QueryParams} params - The query parameters for fetching the notification types.
|
|
86
|
+
* @return {Observable<NotificationsTypeOut>} An observable that emits the fetched notification types.
|
|
87
|
+
*/
|
|
88
|
+
getNotificationsType(params) {
|
|
89
|
+
return this.http.get(`${this.url}/notifications-type`, { params })
|
|
90
|
+
.pipe(map(({ data }) => data));
|
|
91
|
+
}
|
|
92
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiNotificationsService, deps: [{ token: 'env' }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
93
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiNotificationsService, providedIn: 'root' });
|
|
94
|
+
}
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiNotificationsService, decorators: [{
|
|
96
|
+
type: Injectable,
|
|
97
|
+
args: [{
|
|
98
|
+
providedIn: 'root'
|
|
99
|
+
}]
|
|
100
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
101
|
+
type: Inject,
|
|
102
|
+
args: ['env']
|
|
103
|
+
}] }, { type: i1.HttpClient }] });
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLW5vdGlmaWNhdGlvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V4cGVydGVhbS1teC9uZ3gtc2VydmljZXMvc3JjL2xpYi9hcGlzL2FwaS1ub3RpZmljYXRpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFXbEQsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQTs7O0FBS3RDLE1BQU0sT0FBTyx1QkFBdUI7SUFFVDtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7Ozs7T0FLRztJQUNILElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUE7SUFDcEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUUsTUFBbUI7UUFDbkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBK0IsR0FBRyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQ3hGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFFLElBQW9CO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQThCLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN0RixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZUFBZSxDQUFFLEVBQVUsRUFBRSxJQUFvQjtRQUMvQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFFLEVBQVU7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7YUFDdkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUUsRUFBVTtRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDNUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsOEJBQThCLENBQUUsSUFBaUM7UUFDL0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBMkMsR0FBRyxJQUFJLENBQUMsR0FBRyw4QkFBOEIsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pILElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG9CQUFvQixDQUFFLE1BQW1CO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQW1DLEdBQUcsSUFBSSxDQUFDLEdBQUcscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUNqRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO3dHQTVGVSx1QkFBdUIsa0JBRXhCLEtBQUs7NEdBRkosdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLE1BQU07MkJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9uZ3gtc2VydmljZXMubW9kZWxzJ1xyXG5pbXBvcnQgeyBBcGlTdWNjZXNzLCBRdWVyeVBhcmFtcyB9IGZyb20gJy4vbW9kZWxzL2FwaS5tb2RlbHMnXHJcbmltcG9ydCB7XHJcbiAgTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbkluLFxyXG4gIE5vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25PdXQsXHJcbiAgTm90aWZpY2F0aW9uSW4sXHJcbiAgTm90aWZpY2F0aW9uT3V0LFxyXG4gIE5vdGlmaWNhdGlvbnNPdXQsXHJcbiAgTm90aWZpY2F0aW9uc1R5cGVPdXRcclxufSBmcm9tICcuL21vZGVscy9hcGktbm90aWZpY2F0aW9ucy50eXBlcydcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaU5vdGlmaWNhdGlvbnNTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvciAoXHJcbiAgICBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudmlyb25tZW50czogRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIFVSTCBmb3IgdGhlIG5vdGlmaWNhdGlvbnMgQVBJIGZyb20gdGhlIGVudmlyb25tZW50IHNldHRpbmdzLlxyXG4gICAqIElmIHRoZSBVUkwgaXMgbm90IGRlZmluZWQsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIEFQSSBOb3RpZmljYXRpb25zIFVSTCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm90IGRlZmluZWQuXHJcbiAgICovXHJcbiAgZ2V0IHVybCAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50cy5hcGlOb3RpZmljYXRpb25zVXJsID8/ICcnXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgbm90aWZpY2F0aW9ucyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIGFuZCByZXRyaWV2ZSBub3RpZmljYXRpb25zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Tm90aWZpY2F0aW9uc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZmV0Y2hlZCBub3RpZmljYXRpb25zLlxyXG4gICAqL1xyXG4gIGdldE5vdGlmaWNhdGlvbnMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbnNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Tm90aWZpY2F0aW9uc091dD4+KGAke3RoaXMudXJsfS9ub3RpZmljYXRpb25zYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIG5vdGlmaWNhdGlvbiByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIHByb3ZpZGVkIGJvZHkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbklufSBib2R5IC0gVGhlIG5vdGlmaWNhdGlvbiBkYXRhIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbk91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIG5vdGlmaWNhdGlvbiBvdXRwdXQgZGF0YS5cclxuICAgKi9cclxuICBwb3N0Tm90aWZpY2F0aW9uIChib2R5OiBOb3RpZmljYXRpb25Jbik6IE9ic2VydmFibGU8Tm90aWZpY2F0aW9uT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxOb3RpZmljYXRpb25PdXQ+PihgJHt0aGlzLnVybH0vbm90aWZpY2F0aW9uc2AsIHsgYm9keSB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUFVUIHJlcXVlc3QgdG8gdXBkYXRlIGEgbm90aWZpY2F0aW9uIHdpdGggdGhlIHByb3ZpZGVkIElEIGFuZCBib2R5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBub3RpZmljYXRpb24gdG8gYmUgdXBkYXRlZC5cclxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbklufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBub3RpZmljYXRpb24gd2l0aC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbk91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBub3RpZmljYXRpb24gZGF0YS5cclxuICAgKi9cclxuICBwdXROb3RpZmljYXRpb24gKGlkOiBudW1iZXIsIGJvZHk6IE5vdGlmaWNhdGlvbkluKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Tm90aWZpY2F0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L25vdGlmaWNhdGlvbnMvJHtpZH1gLCB7IGJvZHkgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgbm90aWZpY2F0aW9uIGJ5IGl0cyB1bmlxdWUgaWRlbnRpZmllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgbm90aWZpY2F0aW9uIHRvIGRlbGV0ZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHt9Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXNwb25zZSBhZnRlciBkZWxldGluZyB0aGUgbm90aWZpY2F0aW9uLlxyXG4gICAqL1xyXG4gIGRlbGV0ZU5vdGlmaWNhdGlvbiAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8e30+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vbm90aWZpY2F0aW9ucy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFya3MgdGhlIG5vdGlmaWNhdGlvbiBhcyBmaW5pc2hlZCBmb3IgdGhlIHNwZWNpZmllZCBub3RpZmljYXRpb24gSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIG5vdGlmaWNhdGlvbiB0byBiZSBtYXJrZWQgYXMgZmluaXNoZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxOb3RpZmljYXRpb25PdXQ+fSBBbiBPYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSB1cGRhdGVkIG5vdGlmaWNhdGlvbiBvYmplY3QuXHJcbiAgICovXHJcbiAgcHV0Tm90aWZpY2F0aW9uRmluaXNoIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Tm90aWZpY2F0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L25vdGlmaWNhdGlvbnMvZmluaXNoLyR7aWR9YCwge30pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIG9yIHVwZGF0ZSBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbkNvbmZpZ3VyYXRpb25Jbn0gYm9keSAtIFRoZSBub3RpZmljYXRpb24gY29uZmlndXJhdGlvbiBwYXlsb2FkIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxOb3RpZmljYXRpb25Db25maWd1cmF0aW9uT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgY3JlYXRlZCBvciB1cGRhdGVkIG5vdGlmaWNhdGlvbiBjb25maWd1cmF0aW9uLlxyXG4gICAqL1xyXG4gIHBvc3ROb3RpZmljYXRpb25Db25maWd1cmF0aW9ucyAoYm9keTogTm90aWZpY2F0aW9uQ29uZmlndXJhdGlvbkluKTogT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25Db25maWd1cmF0aW9uT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxOb3RpZmljYXRpb25Db25maWd1cmF0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L25vdGlmaWNhdGlvbi1jb25maWd1cmF0aW9uc2AsIHsgYm9keSB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgbm90aWZpY2F0aW9uIHR5cGVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZldGNoaW5nIHRoZSBub3RpZmljYXRpb24gdHlwZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxOb3RpZmljYXRpb25zVHlwZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZmV0Y2hlZCBub3RpZmljYXRpb24gdHlwZXMuXHJcbiAgICovXHJcbiAgZ2V0Tm90aWZpY2F0aW9uc1R5cGUgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbnNUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPE5vdGlmaWNhdGlvbnNUeXBlT3V0Pj4oYCR7dGhpcy51cmx9L25vdGlmaWNhdGlvbnMtdHlwZWAsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxufVxyXG4iXX0=
|