UNPKG

@experteam-mx/ngx-services

Version:

Angular common services for Experteam apps

183 lines 24.4 kB
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 ApiReportsService { environments; http; constructor(environments, http) { this.environments = environments; this.http = http; } /** * Retrieves the URL for the reports API from the environment configurations. * * @return {string} The URL of the reports API. */ get url() { return this.environments.apiReportsUrl ?? ''; } /** * Retrieves the list of collection payments * * @param {QueryParams} params - The query parameters used to fetch the collection payments. * @return {Observable<CollectionPaymentsOut[]>} An observable that emits an array of collection payment. */ getCollectionPayments(params) { return this.http.get(`${this.url}/collection-payment`, { params }).pipe(map(({ data }) => data)); } /** * Fetches the list of shipments with pending payments. * * @param {ExistPendingPaymentsIn} params - The parameters to filter pending payment shipments. * @return {Observable<ShipmentsReportOut>} An observable emitting the shipments report data. */ getShipmentsPendingPayments(params) { return this.http.get(`${this.url}/shipments-report`, { params: { ...params, limit: 1, offset: 0, to_landing: true, shipment_status_code: 'PMPEN', }, }).pipe(map(({ data }) => data)); } /** * Fetches shipment reports that are pending invoices based on the specified parameters. * This method retrieves a filtered list of shipments with pending invoice statuses. * * @param {ExistPendingInvoicesIn} params - The parameters to filter the pending invoices, including * shipment status codes, and pagination options. * @return {Observable<ShipmentsReportOut>} An observable that emits the shipment report data based on the filter criteria. */ getShipmentsPendingInvoices(params) { return this.http.get(`${this.url}/shipments-report`, { params: { ...params, limit: 1, offset: 0, to_landing: true, 'shipment_status_code[in]': 'IPMPE,IMPEN,IPPEN', }, }).pipe(map(({ data }) => data)); } /** * Retrieves a report of shipments that do not have an associated invoice. * * @param params - The parameters to filter the shipments report. Includes details such as * shipment status, invoice document ID, and other query parameters. * @returns An observable that emits the shipments report data. */ getShipmentsWithoutInvoice(params) { return this.http.get(`${this.url}/shipments-report`, { params: { ...params, limit: 1, offset: 0, to_landing: true, shipment_status_code: 'COMPL', 'invoice_document_id[eq]': '[null]' }, }).pipe(map(({ data }) => data)); } /** * Fetches shipment reports based on the provided query parameters. * * @param {QueryParams} params - The query parameters used to filter or define the shipment reports. * @return {Observable<ShipmentsReportOut>} An observable emitting the shipment report data. */ getShipmentsReport(params) { return this.http.get(`${this.url}/shipments-report`, { params }) .pipe(map(({ data }) => data)); } /** * Retrieves a report of external shipments based on the provided query parameters. * * @param {QueryParams} params - An object representing the query parameters for filtering the external shipments report. * @return {Observable<ExternalShipmentsOut>} An observable that emits the external shipments report data. */ getExternalShipmentsReport(params) { return this.http.get(`${this.url}/external-shipments-report`, { params }) .pipe(map(({ data }) => data)); } /** * Retrieves a report of promotion code discounts based on the provided query parameters. * * @param {QueryParams} params - An object representing the query parameters for filtering the promotion code discounts report. * @return {Observable<PromotionCodeDiscountsOut>} An observable that emits the promotion code discounts report data. */ getPromotionCodeDiscounts(params) { return this.http.get(`${this.url}/promotion-code-discounts`, { params }).pipe(map(({ data }) => data)); } /** * Retrieves the downloadable resource associated with the given transaction ID. * * @param {string} transactionId - The unique identifier of the transaction whose download is requested. * @return {Observable<HttpResponse<ArrayBuffer>>} An observable that emits the HTTP response containing the resource in the form of an ArrayBuffer. */ getDownload(transactionId) { return this.http.get(`${this.url}/download/${transactionId}`, { observe: 'response', responseType: 'arraybuffer' }); } /** * Retrieves file check information for the specified transaction ID. * * @param {string} transactionId - The ID of the transaction for which the file check information is to be retrieved. * @return {Observable<FileCheckOut>} An observable that emits the file check information associated with the given transaction ID. */ getFileCheck(transactionId) { return this.http.get(`${this.url}/file-check/${transactionId}`) .pipe(map(({ data }) => data)); } /** * Deletes the file check associated with the provided transaction ID. * * @param {string} transactionId - The unique identifier of the transaction whose file check is to be deleted. * @return {Observable<{}>} An observable emitting the response data after the deletion is processed. */ deleteFileCheck(transactionId) { return this.http.delete(`${this.url}/file-check/${transactionId}`) .pipe(map(({ data }) => data)); } /** * Retrieves partial withdrawals based on the provided query parameters. * * @param {QueryParams} params - The parameters used to filter the list of partial withdrawals. * @returns {Observable<PartialWithdrawalsOut>} An observable that emits the filtered list of partial withdrawals. */ getPartialWithdrawals(params) { return this.http.get(`${this.url}/partial-withdrawals`, { params }) .pipe(map(({ data }) => data)); } /** * Retrieves a list of invoices based on the provided query parameters. * * @param params - The query parameters used to filter the invoices. * @returns An observable that emits the list of invoices. */ getInvoices(params) { return this.http.get(`${this.url}/invoices`, { params }) .pipe(map(({ data }) => data)); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiReportsService, 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: ApiReportsService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiReportsService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: ['env'] }] }, { type: i1.HttpClient }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXJlcG9ydHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V4cGVydGVhbS1teC9uZ3gtc2VydmljZXMvc3JjL2xpYi9hcGlzL2FwaS1yZXBvcnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHbEQsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQTs7O0FBZXRDLE1BQU0sT0FBTyxpQkFBaUI7SUFFSDtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUE7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUUsTUFBbUI7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBb0MsR0FBRyxJQUFJLENBQUMsR0FBRyxxQkFBcUIsRUFBRTtZQUN4RixNQUFNO1NBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILDJCQUEyQixDQUFFLE1BQThCO1FBQ3pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWlDLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLEVBQUU7WUFDbkYsTUFBTSxFQUFFO2dCQUNOLEdBQUcsTUFBTTtnQkFDVCxLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsQ0FB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QUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL25neC1zZXJ2aWNlcy5tb2RlbHMnXHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBBcGlTdWNjZXNzLCBRdWVyeVBhcmFtcyB9IGZyb20gJy4vbW9kZWxzL2FwaS5tb2RlbHMnXHJcbmltcG9ydCB7XHJcbiAgQ29sbGVjdGlvblBheW1lbnRzT3V0LFxyXG4gIEV4aXN0UGVuZGluZ0ludm9pY2VzSW4sXHJcbiAgRXhpc3RQZW5kaW5nUGF5bWVudHNJbixcclxuICBFeHRlcm5hbFNoaXBtZW50c091dCxcclxuICBGaWxlQ2hlY2tPdXQsIEludm9pY2VzT3V0LCBQYXJ0aWFsV2l0aGRyYXdhbHNPdXQsXHJcbiAgUHJvbW90aW9uQ29kZURpc2NvdW50c091dCxcclxuICBTaGlwbWVudHNSZXBvcnRPdXRcclxufSBmcm9tICcuL21vZGVscy9hcGktcmVwb3J0cy50eXBlcydcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaVJlcG9ydHNTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvciAoXHJcbiAgICBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudmlyb25tZW50czogRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIFVSTCBmb3IgdGhlIHJlcG9ydHMgQVBJIGZyb20gdGhlIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25zLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgVVJMIG9mIHRoZSByZXBvcnRzIEFQSS5cclxuICAgKi9cclxuICBnZXQgdXJsICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnRzLmFwaVJlcG9ydHNVcmwgPz8gJydcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBjb2xsZWN0aW9uIHBheW1lbnRzXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZldGNoIHRoZSBjb2xsZWN0aW9uIHBheW1lbnRzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q29sbGVjdGlvblBheW1lbnRzT3V0W10+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gYXJyYXkgb2YgY29sbGVjdGlvbiBwYXltZW50LlxyXG4gICAqL1xyXG4gIGdldENvbGxlY3Rpb25QYXltZW50cyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q29sbGVjdGlvblBheW1lbnRzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvbGxlY3Rpb25QYXltZW50c091dD4+KGAke3RoaXMudXJsfS9jb2xsZWN0aW9uLXBheW1lbnRgLCB7XHJcbiAgICAgIHBhcmFtc1xyXG4gICAgfSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGxpc3Qgb2Ygc2hpcG1lbnRzIHdpdGggcGVuZGluZyBwYXltZW50cy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXhpc3RQZW5kaW5nUGF5bWVudHNJbn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gZmlsdGVyIHBlbmRpbmcgcGF5bWVudCBzaGlwbWVudHMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTaGlwbWVudHNSZXBvcnRPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBzaGlwbWVudHMgcmVwb3J0IGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0U2hpcG1lbnRzUGVuZGluZ1BheW1lbnRzIChwYXJhbXM6IEV4aXN0UGVuZGluZ1BheW1lbnRzSW4pOiBPYnNlcnZhYmxlPFNoaXBtZW50c1JlcG9ydE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxTaGlwbWVudHNSZXBvcnRPdXQ+PihgJHt0aGlzLnVybH0vc2hpcG1lbnRzLXJlcG9ydGAsIHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgIGxpbWl0OiAxLFxyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICB0b19sYW5kaW5nOiB0cnVlLFxyXG4gICAgICAgIHNoaXBtZW50X3N0YXR1c19jb2RlOiAnUE1QRU4nLFxyXG4gICAgICB9LFxyXG4gICAgfSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgc2hpcG1lbnQgcmVwb3J0cyB0aGF0IGFyZSBwZW5kaW5nIGludm9pY2VzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy5cclxuICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZXMgYSBmaWx0ZXJlZCBsaXN0IG9mIHNoaXBtZW50cyB3aXRoIHBlbmRpbmcgaW52b2ljZSBzdGF0dXNlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXhpc3RQZW5kaW5nSW52b2ljZXNJbn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSBwZW5kaW5nIGludm9pY2VzLCBpbmNsdWRpbmdcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlwbWVudCBzdGF0dXMgY29kZXMsIGFuZCBwYWdpbmF0aW9uIG9wdGlvbnMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTaGlwbWVudHNSZXBvcnRPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNoaXBtZW50IHJlcG9ydCBkYXRhIGJhc2VkIG9uIHRoZSBmaWx0ZXIgY3JpdGVyaWEuXHJcbiAgICovXHJcbiAgZ2V0U2hpcG1lbnRzUGVuZGluZ0ludm9pY2VzIChwYXJhbXM6IEV4aXN0UGVuZGluZ0ludm9pY2VzSW4pOiBPYnNlcnZhYmxlPFNoaXBtZW50c1JlcG9ydE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxTaGlwbWVudHNSZXBvcnRPdXQ+PihgJHt0aGlzLnVybH0vc2hpcG1lbnRzLXJlcG9ydGAsIHtcclxuICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgIGxpbWl0OiAxLFxyXG4gICAgICAgIG9mZnNldDogMCxcclxuICAgICAgICB0b19sYW5kaW5nOiB0cnVlLFxyXG4gICAgICAgICdzaGlwbWVudF9zdGF0dXNfY29kZVtpbl0nOiAnSVBNUEUsSU1QRU4sSVBQRU4nLFxyXG4gICAgICB9LFxyXG4gICAgfSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIHJlcG9ydCBvZiBzaGlwbWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGludm9pY2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSBzaGlwbWVudHMgcmVwb3J0LiBJbmNsdWRlcyBkZXRhaWxzIHN1Y2ggYXNcclxuICAgKiAgICAgICAgICAgICAgICAgc2hpcG1lbnQgc3RhdHVzLCBpbnZvaWNlIGRvY3VtZW50IElELCBhbmQgb3RoZXIgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNoaXBtZW50cyByZXBvcnQgZGF0YS5cclxuICAgKi9cclxuICBnZXRTaGlwbWVudHNXaXRob3V0SW52b2ljZSAocGFyYW1zOiBFeGlzdFBlbmRpbmdJbnZvaWNlc0luKTogT2JzZXJ2YWJsZTxTaGlwbWVudHNSZXBvcnRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U2hpcG1lbnRzUmVwb3J0T3V0Pj4oYCR7dGhpcy51cmx9L3NoaXBtZW50cy1yZXBvcnRgLCB7XHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIC4uLnBhcmFtcyxcclxuICAgICAgICBsaW1pdDogMSxcclxuICAgICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgICAgdG9fbGFuZGluZzogdHJ1ZSxcclxuICAgICAgICBzaGlwbWVudF9zdGF0dXNfY29kZTogJ0NPTVBMJyxcclxuICAgICAgICAnaW52b2ljZV9kb2N1bWVudF9pZFtlcV0nOiAnW251bGxdJ1xyXG4gICAgICB9LFxyXG4gICAgfSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgc2hpcG1lbnQgcmVwb3J0cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIG9yIGRlZmluZSB0aGUgc2hpcG1lbnQgcmVwb3J0cy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFNoaXBtZW50c1JlcG9ydE91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHNoaXBtZW50IHJlcG9ydCBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFNoaXBtZW50c1JlcG9ydCAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8U2hpcG1lbnRzUmVwb3J0T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFNoaXBtZW50c1JlcG9ydE91dD4+KGAke3RoaXMudXJsfS9zaGlwbWVudHMtcmVwb3J0YCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSByZXBvcnQgb2YgZXh0ZXJuYWwgc2hpcG1lbnRzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcXVlcnkgcGFyYW1ldGVycyBmb3IgZmlsdGVyaW5nIHRoZSBleHRlcm5hbCBzaGlwbWVudHMgcmVwb3J0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RXh0ZXJuYWxTaGlwbWVudHNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGV4dGVybmFsIHNoaXBtZW50cyByZXBvcnQgZGF0YS5cclxuICAgKi9cclxuICBnZXRFeHRlcm5hbFNoaXBtZW50c1JlcG9ydCAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RXh0ZXJuYWxTaGlwbWVudHNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8RXh0ZXJuYWxTaGlwbWVudHNPdXQ+PihgJHt0aGlzLnVybH0vZXh0ZXJuYWwtc2hpcG1lbnRzLXJlcG9ydGAsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgcmVwb3J0IG9mIHByb21vdGlvbiBjb2RlIGRpc2NvdW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyB0aGUgcHJvbW90aW9uIGNvZGUgZGlzY291bnRzIHJlcG9ydC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFByb21vdGlvbkNvZGVEaXNjb3VudHNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHByb21vdGlvbiBjb2RlIGRpc2NvdW50cyByZXBvcnQgZGF0YS5cclxuICAgKi9cclxuICBnZXRQcm9tb3Rpb25Db2RlRGlzY291bnRzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxQcm9tb3Rpb25Db2RlRGlzY291bnRzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFByb21vdGlvbkNvZGVEaXNjb3VudHNPdXQ+PihgJHt0aGlzLnVybH0vcHJvbW90aW9uLWNvZGUtZGlzY291bnRzYCwge1xyXG4gICAgICBwYXJhbXNcclxuICAgIH0pLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGRvd25sb2FkYWJsZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRyYW5zYWN0aW9uIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zYWN0aW9uSWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHRyYW5zYWN0aW9uIHdob3NlIGRvd25sb2FkIGlzIHJlcXVlc3RlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcnJheUJ1ZmZlcj4+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIEhUVFAgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgcmVzb3VyY2UgaW4gdGhlIGZvcm0gb2YgYW4gQXJyYXlCdWZmZXIuXHJcbiAgICovXHJcbiAgZ2V0RG93bmxvYWQgKHRyYW5zYWN0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFycmF5QnVmZmVyPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2Rvd25sb2FkLyR7dHJhbnNhY3Rpb25JZH1gLCB7XHJcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXHJcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBmaWxlIGNoZWNrIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRyYW5zYWN0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIHRyYW5zYWN0aW9uIGZvciB3aGljaCB0aGUgZmlsZSBjaGVjayBpbmZvcm1hdGlvbiBpcyB0byBiZSByZXRyaWV2ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxGaWxlQ2hlY2tPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGZpbGUgY2hlY2sgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiB0cmFuc2FjdGlvbiBJRC5cclxuICAgKi9cclxuICBnZXRGaWxlQ2hlY2sgKHRyYW5zYWN0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RmlsZUNoZWNrT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEZpbGVDaGVja091dD4+KGAke3RoaXMudXJsfS9maWxlLWNoZWNrLyR7dHJhbnNhY3Rpb25JZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgdGhlIGZpbGUgY2hlY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlZCB0cmFuc2FjdGlvbiBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2FjdGlvbklkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSB0cmFuc2FjdGlvbiB3aG9zZSBmaWxlIGNoZWNrIGlzIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTx7fT59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHJlc3BvbnNlIGRhdGEgYWZ0ZXIgdGhlIGRlbGV0aW9uIGlzIHByb2Nlc3NlZC5cclxuICAgKi9cclxuICBkZWxldGVGaWxlQ2hlY2sgKHRyYW5zYWN0aW9uSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8e30+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vZmlsZS1jaGVjay8ke3RyYW5zYWN0aW9uSWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcGFydGlhbCB3aXRoZHJhd2FscyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIHRoZSBsaXN0IG9mIHBhcnRpYWwgd2l0aGRyYXdhbHMuXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8UGFydGlhbFdpdGhkcmF3YWxzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBmaWx0ZXJlZCBsaXN0IG9mIHBhcnRpYWwgd2l0aGRyYXdhbHMuXHJcbiAgICovXHJcbiAgZ2V0UGFydGlhbFdpdGhkcmF3YWxzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxQYXJ0aWFsV2l0aGRyYXdhbHNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UGFydGlhbFdpdGhkcmF3YWxzT3V0Pj4oYCR7dGhpcy51cmx9L3BhcnRpYWwtd2l0aGRyYXdhbHNgLCB7XHJcbiAgICAgIHBhcmFtc1xyXG4gICAgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGludm9pY2VzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIHRoZSBpbnZvaWNlcy5cclxuICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgaW52b2ljZXMuXHJcbiAgICovXHJcbiAgZ2V0SW52b2ljZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEludm9pY2VzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEludm9pY2VzT3V0Pj4oYCR7dGhpcy51cmx9L2ludm9pY2VzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG59XHJcbiJdfQ==