@experteam-mx/ngx-services
Version:
Angular common services for Experteam apps
144 lines • 21.6 kB
JavaScript
import { Inject, Injectable } from '@angular/core';
import { map } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
export class ApiInvoicesService {
environments;
http;
constructor(environments, http) {
this.environments = environments;
this.http = http;
}
/**
* Retrieves the API URL for invoices from the environments configuration.
*
* @return {string} The API URL for invoices.
*/
get url() {
return this.environments.apiInvoicesUrl ?? '';
}
/**
* Sends an operation document to the server and processes the response.
*
* @param {OperationDocumentIn} body - The input data for the operation document.
* @return {Observable<OperationDocumentOut>} An observable containing the processed operation document output.
*/
postOperationDocument(body) {
return this.http.post(`${this.url}/operation/document`, body)
.pipe(map(({ data }) => data));
}
/**
* Fetches and returns the collection receipt data for a given collection ID.
*
* @param {number} id - The unique identifier of the collection for which the receipt needs to be retrieved.
* @return {Observable<PrintCollectionReceiptOut>} An observable containing the collection receipt data.
*/
getPrintCollectionReceipt(id) {
return this.http.get(`${this.url}/operation/print/collection-receipt/${id}`)
.pipe(map(({ data }) => data));
}
/**
* Handles the account payment operation by sending a POST request to the specified endpoint.
* Processes the response and returns the operation data.
*
* @param {OperationAccountPaymentIn} body The payload containing information for the account payment operation.
* @return {Observable<OperationAccountPaymentOut>} An observable emitting the processed account payment operation data.
*/
postOperationAccountPayment(body) {
return this.http.post(`${this.url}/operation/account-payment`, body)
.pipe(map(({ data }) => data));
}
/**
* Cancels a payment receipt based on the provided input.
* This method sends a POST request to cancel a document.
*
* @param body The data required to cancel the payment receipt, encapsulated in a CancelPaymentReceiptIn object.
* @return An Observable representing the result of the cancellation. Emits an empty object on success.
*/
postOperationCancelDocument(body) {
return this.http.post(`${this.url}/operation/cancel-document`, body)
.pipe(map(({ data }) => data));
}
/**
* Cancels an invoice based on the provided invoice ID and additional parameters.
*
* @param {Object} parameters - The parameters required to cancel the invoice, encapsulated in a CancelBillingIn object.
* @return {Observable<Object>} An observable that emits the response of the cancellation operation.
*/
postOperationCancelBilling({ invoiceId, ...body }) {
return this.http.post(`${this.url}/operation/cancel-billing/${invoiceId}`, body)
.pipe(map(({ data }) => data));
}
/**
* Fetches a list of customer types from the server.
*
* @param {QueryParams} params - Query parameters to filter or customize the request.
* @return {Observable<CustomerTypesOut>} An observable emitting the customer types fetched from the server.
*/
getCustomerTypes(params) {
return this.http.get(`${this.url}/customer-types`, { params })
.pipe(map(({ data }) => data));
}
/**
* Retrieves document types specific to a given country.
*
* @param {QueryParams} params - The query parameters containing country-specific information.
* @return {Observable<CustomerDocumentTypesOut>} An observable emitting the document types available for the specified country.
*/
getCustomerDocumentTypes(params) {
return this.http.get(`${this.url}/customer-country-document-types`, { params })
.pipe(map(({ data }) => data));
}
/**
* Fetches customer invoice details filtered by a custom invoice type.
*
* @param {InvoiceTypeCustomParamsIn} params - An object containing the filter parameters for the custom invoice type.
* @return {Observable<CustomersOut>} An observable containing customer invoice details of the specified type.
*/
getCustomers(params) {
return this.http.get(`${this.url}/customers`, { params })
.pipe(map(({ data }) => data));
}
/**
* Sends a POST request to create or update an external shipment operation.
*
* @param {OperationShipmentExternalIn} params - The input parameters for the external shipment operation.
* @return {Observable<OperationShipmentExternalOut>} An observable that emits the result of the external shipment operation.
*/
postOperationShipmentExternal(params) {
return this.http.post(`${this.url}/operation/shipment/external`, params)
.pipe(map(({ data }) => data));
}
/**
* Processes an external payment operation for a shipment.
*
* @param {OperationShipmentExternalIn} params - The input parameters required for the external payment operation.
* @return {Observable<OperationShipmentExternalOut>} An observable that emits the result of the external payment operation for a shipment.
*/
postOperationShipmentExternalPayment(params) {
return this.http.post(`${this.url}/operation/shipment/external/payment`, params)
.pipe(map(({ data }) => data));
}
/**
* Retrieves and returns billing operation print details for a given document ID.
*
* @param {number} documentId - The ID of the document for which to fetch the print billing operation details.
* @return {Observable<OperationPrintDocumentOut>} An observable emitting the print billing operation details for the specified document.
*/
getOperationPrintDocument(documentId) {
return this.http.get(`${this.url}/operation/print/document/${documentId}`)
.pipe(map(({ data }) => data));
}
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 });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiInvoicesService, providedIn: 'root' });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiInvoicesService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: ['env']
}] }, { type: i1.HttpClient }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWludm9pY2VzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcnRlYW0tbXgvbmd4LXNlcnZpY2VzL3NyYy9saWIvYXBpcy9hcGktaW52b2ljZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFBOzs7QUF1QnRDLE1BQU0sT0FBTyxrQkFBa0I7SUFFSjtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUE7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUUsSUFBeUI7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBbUMsR0FBRyxJQUFJLENBQUMsR0FBRyxxQkFBcUIsRUFBRSxJQUFJLENBQUM7YUFDNUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gseUJBQXlCLENBQUUsRUFBVTtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF3QyxHQUFHLElBQUksQ0FBQyxHQUFHLHVDQUF1QyxFQUFFLEVBQUUsQ0FBQzthQUNoSCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFD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S0c7SUFDSCx5QkFBeUIsQ0FBRSxVQUFrQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF3QyxHQUFHLElBQUksQ0FBQyxHQUFHLDZCQUE2QixVQUFVLEVBQUUsQ0FBQzthQUM5RyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO3dHQXhJVSxrQkFBa0Isa0JBRW5CLEtBQUs7NEdBRkosa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLE1BQU07MkJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9uZ3gtc2VydmljZXMubW9kZWxzJ1xyXG5pbXBvcnQge1xyXG4gIENhbmNlbFBheW1lbnRSZWNlaXB0SW4sXHJcbiAgQ3VzdG9tZXJEb2N1bWVudFR5cGVzT3V0LFxyXG4gIEN1c3RvbWVyc091dCxcclxuICBDdXN0b21lclR5cGVzT3V0LFxyXG4gIEludm9pY2VUeXBlQ3VzdG9tUGFyYW1zSW4sXHJcbiAgT3BlcmF0aW9uQWNjb3VudFBheW1lbnRJbixcclxuICBPcGVyYXRpb25BY2NvdW50UGF5bWVudE91dCxcclxuICBPcGVyYXRpb25DYW5jZWxCaWxsaW5nSW4sXHJcbiAgT3BlcmF0aW9uRG9jdW1lbnRJbixcclxuICBPcGVyYXRpb25Eb2N1bWVudE91dCxcclxuICBPcGVyYXRpb25QcmludERvY3VtZW50T3V0LFxyXG4gIE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxJbixcclxuICBPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0LFxyXG4gIFByaW50Q29sbGVjdGlvblJlY2VpcHRPdXRcclxufSBmcm9tICcuL21vZGVscy9hcGktaW52b2ljZXMudHlwZXMnXHJcbmltcG9ydCB7IEFwaVN1Y2Nlc3MsIFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi9tb2RlbHMvYXBpLm1vZGVscydcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaUludm9pY2VzU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IgKFxyXG4gICAgQEluamVjdCgnZW52JykgcHJpdmF0ZSBlbnZpcm9ubWVudHM6IEVudmlyb25tZW50LFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBBUEkgVVJMIGZvciBpbnZvaWNlcyBmcm9tIHRoZSBlbnZpcm9ubWVudHMgY29uZmlndXJhdGlvbi5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIEFQSSBVUkwgZm9yIGludm9pY2VzLlxyXG4gICAqL1xyXG4gIGdldCB1cmwgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudHMuYXBpSW52b2ljZXNVcmwgPz8gJydcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGFuIG9wZXJhdGlvbiBkb2N1bWVudCB0byB0aGUgc2VydmVyIGFuZCBwcm9jZXNzZXMgdGhlIHJlc3BvbnNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPcGVyYXRpb25Eb2N1bWVudElufSBib2R5IC0gVGhlIGlucHV0IGRhdGEgZm9yIHRoZSBvcGVyYXRpb24gZG9jdW1lbnQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcGVyYXRpb25Eb2N1bWVudE91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgcHJvY2Vzc2VkIG9wZXJhdGlvbiBkb2N1bWVudCBvdXRwdXQuXHJcbiAgICovXHJcbiAgcG9zdE9wZXJhdGlvbkRvY3VtZW50IChib2R5OiBPcGVyYXRpb25Eb2N1bWVudEluKTogT2JzZXJ2YWJsZTxPcGVyYXRpb25Eb2N1bWVudE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8T3BlcmF0aW9uRG9jdW1lbnRPdXQ+PihgJHt0aGlzLnVybH0vb3BlcmF0aW9uL2RvY3VtZW50YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIHJlY2VpcHQgZGF0YSBmb3IgYSBnaXZlbiBjb2xsZWN0aW9uIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb2xsZWN0aW9uIGZvciB3aGljaCB0aGUgcmVjZWlwdCBuZWVkcyB0byBiZSByZXRyaWV2ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQcmludENvbGxlY3Rpb25SZWNlaXB0T3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBjb2xsZWN0aW9uIHJlY2VpcHQgZGF0YS5cclxuICAgKi9cclxuICBnZXRQcmludENvbGxlY3Rpb25SZWNlaXB0IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxQcmludENvbGxlY3Rpb25SZWNlaXB0T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFByaW50Q29sbGVjdGlvblJlY2VpcHRPdXQ+PihgJHt0aGlzLnVybH0vb3BlcmF0aW9uL3ByaW50L2NvbGxlY3Rpb24tcmVjZWlwdC8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB0aGUgYWNjb3VudCBwYXltZW50IG9wZXJhdGlvbiBieSBzZW5kaW5nIGEgUE9TVCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQuXHJcbiAgICogUHJvY2Vzc2VzIHRoZSByZXNwb25zZSBhbmQgcmV0dXJucyB0aGUgb3BlcmF0aW9uIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09wZXJhdGlvbkFjY291bnRQYXltZW50SW59IGJvZHkgVGhlIHBheWxvYWQgY29udGFpbmluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGFjY291bnQgcGF5bWVudCBvcGVyYXRpb24uXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcGVyYXRpb25BY2NvdW50UGF5bWVudE91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHByb2Nlc3NlZCBhY2NvdW50IHBheW1lbnQgb3BlcmF0aW9uIGRhdGEuXHJcbiAgICovXHJcbiAgcG9zdE9wZXJhdGlvbkFjY291bnRQYXltZW50IChib2R5OiBPcGVyYXRpb25BY2NvdW50UGF5bWVudEluKTogT2JzZXJ2YWJsZTxPcGVyYXRpb25BY2NvdW50UGF5bWVudE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8T3BlcmF0aW9uQWNjb3VudFBheW1lbnRPdXQ+PihgJHt0aGlzLnVybH0vb3BlcmF0aW9uL2FjY291bnQtcGF5bWVudGAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VscyBhIHBheW1lbnQgcmVjZWlwdCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5wdXQuXHJcbiAgICogVGhpcyBtZXRob2Qgc2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY2FuY2VsIGEgZG9jdW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYm9keSBUaGUgZGF0YSByZXF1aXJlZCB0byBjYW5jZWwgdGhlIHBheW1lbnQgcmVjZWlwdCwgZW5jYXBzdWxhdGVkIGluIGEgQ2FuY2VsUGF5bWVudFJlY2VpcHRJbiBvYmplY3QuXHJcbiAgICogQHJldHVybiBBbiBPYnNlcnZhYmxlIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBjYW5jZWxsYXRpb24uIEVtaXRzIGFuIGVtcHR5IG9iamVjdCBvbiBzdWNjZXNzLlxyXG4gICAqL1xyXG4gIHBvc3RPcGVyYXRpb25DYW5jZWxEb2N1bWVudCAoYm9keTogQ2FuY2VsUGF5bWVudFJlY2VpcHRJbik6IE9ic2VydmFibGU8e30+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPHt9Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9jYW5jZWwtZG9jdW1lbnRgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgYW4gaW52b2ljZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW52b2ljZSBJRCBhbmQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmFtZXRlcnMgLSBUaGUgcGFyYW1ldGVycyByZXF1aXJlZCB0byBjYW5jZWwgdGhlIGludm9pY2UsIGVuY2Fwc3VsYXRlZCBpbiBhIENhbmNlbEJpbGxpbmdJbiBvYmplY3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPYmplY3Q+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3BvbnNlIG9mIHRoZSBjYW5jZWxsYXRpb24gb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIHBvc3RPcGVyYXRpb25DYW5jZWxCaWxsaW5nICh7IGludm9pY2VJZCwgLi4uYm9keSB9OiBPcGVyYXRpb25DYW5jZWxCaWxsaW5nSW4pOiBPYnNlcnZhYmxlPHt9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vY2FuY2VsLWJpbGxpbmcvJHtpbnZvaWNlSWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGEgbGlzdCBvZiBjdXN0b21lciB0eXBlcyBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBvciBjdXN0b21pemUgdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDdXN0b21lclR5cGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgY3VzdG9tZXIgdHlwZXMgZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgZ2V0Q3VzdG9tZXJUeXBlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q3VzdG9tZXJUeXBlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDdXN0b21lclR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L2N1c3RvbWVyLXR5cGVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgZG9jdW1lbnQgdHlwZXMgc3BlY2lmaWMgdG8gYSBnaXZlbiBjb3VudHJ5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgY29udGFpbmluZyBjb3VudHJ5LXNwZWNpZmljIGluZm9ybWF0aW9uLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3VzdG9tZXJEb2N1bWVudFR5cGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgZG9jdW1lbnQgdHlwZXMgYXZhaWxhYmxlIGZvciB0aGUgc3BlY2lmaWVkIGNvdW50cnkuXHJcbiAgICovXHJcbiAgZ2V0Q3VzdG9tZXJEb2N1bWVudFR5cGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDdXN0b21lckRvY3VtZW50VHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q3VzdG9tZXJEb2N1bWVudFR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L2N1c3RvbWVyLWNvdW50cnktZG9jdW1lbnQtdHlwZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgY3VzdG9tZXIgaW52b2ljZSBkZXRhaWxzIGZpbHRlcmVkIGJ5IGEgY3VzdG9tIGludm9pY2UgdHlwZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SW52b2ljZVR5cGVDdXN0b21QYXJhbXNJbn0gcGFyYW1zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbHRlciBwYXJhbWV0ZXJzIGZvciB0aGUgY3VzdG9tIGludm9pY2UgdHlwZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEN1c3RvbWVyc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyBjdXN0b21lciBpbnZvaWNlIGRldGFpbHMgb2YgdGhlIHNwZWNpZmllZCB0eXBlLlxyXG4gICAqL1xyXG4gIGdldEN1c3RvbWVycyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q3VzdG9tZXJzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEN1c3RvbWVyc091dD4+KGAke3RoaXMudXJsfS9jdXN0b21lcnNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBvciB1cGRhdGUgYW4gZXh0ZXJuYWwgc2hpcG1lbnQgb3BlcmF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsSW59IHBhcmFtcyAtIFRoZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgZXh0ZXJuYWwgc2hpcG1lbnQgb3BlcmF0aW9uLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbE91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBleHRlcm5hbCBzaGlwbWVudCBvcGVyYXRpb24uXHJcbiAgICovXHJcbiAgcG9zdE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWwgKHBhcmFtczogT3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbEluKTogT2JzZXJ2YWJsZTxPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxPcGVyYXRpb25TaGlwbWVudEV4dGVybmFsT3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi9zaGlwbWVudC9leHRlcm5hbGAsIHBhcmFtcylcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQcm9jZXNzZXMgYW4gZXh0ZXJuYWwgcGF5bWVudCBvcGVyYXRpb24gZm9yIGEgc2hpcG1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge09wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxJbn0gcGFyYW1zIC0gVGhlIGlucHV0IHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIHRoZSBleHRlcm5hbCBwYXltZW50IG9wZXJhdGlvbi5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3VsdCBvZiB0aGUgZXh0ZXJuYWwgcGF5bWVudCBvcGVyYXRpb24gZm9yIGEgc2hpcG1lbnQuXHJcbiAgICovXHJcbiAgcG9zdE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxQYXltZW50IChwYXJhbXM6IE9wZXJhdGlvblNoaXBtZW50RXh0ZXJuYWxJbik6IE9ic2VydmFibGU8T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8T3BlcmF0aW9uU2hpcG1lbnRFeHRlcm5hbE91dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vc2hpcG1lbnQvZXh0ZXJuYWwvcGF5bWVudGAsIHBhcmFtcylcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYW5kIHJldHVybnMgYmlsbGluZyBvcGVyYXRpb24gcHJpbnQgZGV0YWlscyBmb3IgYSBnaXZlbiBkb2N1bWVudCBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkb2N1bWVudElkIC0gVGhlIElEIG9mIHRoZSBkb2N1bWVudCBmb3Igd2hpY2ggdG8gZmV0Y2ggdGhlIHByaW50IGJpbGxpbmcgb3BlcmF0aW9uIGRldGFpbHMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPcGVyYXRpb25QcmludERvY3VtZW50T3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcHJpbnQgYmlsbGluZyBvcGVyYXRpb24gZGV0YWlscyBmb3IgdGhlIHNwZWNpZmllZCBkb2N1bWVudC5cclxuICAgKi9cclxuICBnZXRPcGVyYXRpb25QcmludERvY3VtZW50IChkb2N1bWVudElkOiBudW1iZXIpOiBPYnNlcnZhYmxlPE9wZXJhdGlvblByaW50RG9jdW1lbnRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8T3BlcmF0aW9uUHJpbnREb2N1bWVudE91dD4+KGAke3RoaXMudXJsfS9vcGVyYXRpb24vcHJpbnQvZG9jdW1lbnQvJHtkb2N1bWVudElkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxufVxyXG4iXX0=