UNPKG

@fdot/angular-dotcodes

Version:

`npm install @fdot/angular-dotcodes --save`

192 lines (191 loc) 23.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Inject, Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Observable, BehaviorSubject } from 'rxjs'; import { map } from 'rxjs/operators'; import { Config } from './models/config'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; export class AngularDotcodesService { /** * @param {?} http * @param {?} config */ constructor(http, config) { this.http = http; this.config = config; this.codesCache = new Map(); this.codeCache = new Map(); if (!config) { throw Error('Call AngularDotcodesService with for root passing in the config object'); } } /** * Method GetCode * @param {?} column Column name to get Dotcode from * @param {?} codeValue The code value to retrieve * @return {?} Full HTTP response as Observable */ GetCode(column, codeValue) { const /** @type {?} */ key = `${column}-${codeValue}`; if (this.codeCache.get(key)) { this.codeCache.get(`${column}-${codeValue}`); } else if (this.codesCache.get(column)) { const /** @type {?} */ codes = this.codesCache.get(column).value; if (codes) { const /** @type {?} */ code = codes.filter(c => c.value === codeValue); if (code && code.length === 1) { if (!this.codeCache.get(key)) { this.codeCache.set(key, new BehaviorSubject(null)); } this.codeCache.get(key).next(code[0]); } else { this.loadCodes(key, column, codeValue); } } else { this.loadCodes(key, column, codeValue); } } else { this.loadCodes(key, column, codeValue); } return this.codeCache.get(key); } /** * @param {?} key * @param {?} column * @param {?} codeValue * @return {?} */ loadCodes(key, column, codeValue) { this.codeCache.set(key, new BehaviorSubject(null)); const /** @type {?} */ uri = `/GetCode`; const /** @type {?} */ headers = new HttpHeaders(); let /** @type {?} */ params = new HttpParams(); if (column !== undefined && column !== null) { params = params.set('column', column + ''); } if (codeValue !== undefined && codeValue !== null) { params = params.set('codeValue', codeValue + ''); } this.sendRequest('get', uri, headers, params, null).toPromise().then(b => { if (b && b.body) { this.codeCache.get(key).next(b.body); } }); } /** * Method GetCodes * @param {?} column Column name to get Dotcode from * @return {?} Full HTTP response as Observable */ GetCodes(column) { if (this.codesCache.get(column)) { this.codesCache.get(column); } else { this.codesCache.set(column, new BehaviorSubject(null)); const /** @type {?} */ uri = `/GetCodes`; const /** @type {?} */ headers = new HttpHeaders(); let /** @type {?} */ params = new HttpParams(); if (column !== undefined && column !== null) { params = params.set('column', column + ''); } this.sendRequest('get', uri, headers, params, null).toPromise().then(b => { if (b && b.body) { this.codesCache.get(column).next(b.body); } }); } return this.codesCache.get(column); } /** * Method GetRelatedCodes * @param {?} column Column name for dotcode * @param {?} codeValue DotCode value to get related codes for * @param {?} relatedCode Related Column name to get Related Codes from * @return {?} Full HTTP response as Observable */ GetRelatedCodes(column, codeValue, relatedCode) { const /** @type {?} */ uri = `/GetRelatedCodes`; const /** @type {?} */ headers = new HttpHeaders(); let /** @type {?} */ params = new HttpParams(); if (column !== undefined && column !== null) { params = params.set('column', column + ''); } if (codeValue !== undefined && codeValue !== null) { params = params.set('codeValue', codeValue + ''); } if (relatedCode !== undefined && relatedCode !== null) { params = params.set('relatedCode', relatedCode + ''); } return this.sendRequest('get', uri, headers, params, null).pipe(map(b => { if (b && b.body) { return b.body; } })); } /** * @template T * @param {?} method * @param {?} uri * @param {?} headers * @param {?} params * @param {?} body * @return {?} */ sendRequest(method, uri, headers, params, body) { headers = headers.set('Ocp-Apim-Subscription-Key', this.config.apiKey); if (method === 'get') { return this.http.get(this.config.host + uri, { headers: headers.set('Accept', 'application/json'), params: params, observe: 'response' }); } else if (method === 'put') { return this.http.put(this.config.host + uri, body, { headers: headers.set('Content-Type', 'application/json'), params: params, observe: 'response' }); } else if (method === 'post') { return this.http.post(this.config.host + uri, body, { headers: headers.set('Content-Type', 'application/json'), params: params, observe: 'response' }); } else if (method === 'delete') { return this.http.delete(this.config.host + uri, { headers: headers, params: params, observe: 'response' }); } else { console.error('Unsupported request: ' + method); return Observable.throw('Unsupported request: ' + method); } } } AngularDotcodesService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] }, ]; /** @nocollapse */ AngularDotcodesService.ctorParameters = () => [ { type: HttpClient, }, { type: Config, decorators: [{ type: Inject, args: ['config',] },] }, ]; /** @nocollapse */ AngularDotcodesService.ngInjectableDef = i0.defineInjectable({ factory: function AngularDotcodesService_Factory() { return new AngularDotcodesService(i0.inject(i1.HttpClient), i0.inject("config")); }, token: AngularDotcodesService, providedIn: "root" }); function AngularDotcodesService_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ AngularDotcodesService.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ AngularDotcodesService.ctorParameters; /** @type {?} */ AngularDotcodesService.prototype.codesCache; /** @type {?} */ AngularDotcodesService.prototype.codeCache; /** @type {?} */ AngularDotcodesService.prototype.http; /** @type {?} */ AngularDotcodesService.prototype.config; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1kb3Rjb2Rlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZkb3QvYW5ndWxhci1kb3Rjb2Rlcy8iLCJzb3VyY2VzIjpbImxpYi9hbmd1bGFyLWRvdGNvZGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLekMsTUFBTTs7Ozs7SUFJSixZQUFvQixJQUFnQixFQUE0QjtRQUE1QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQTRCLFdBQU0sR0FBTixNQUFNOzBCQUhqRCxJQUFJLEdBQUcsRUFBc0M7eUJBQzlDLElBQUksR0FBRyxFQUFvQztRQUc3RCxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDWixNQUFNLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1NBQ3ZGO0tBQ0Y7Ozs7Ozs7SUFRTSxPQUFPLENBQUMsTUFBYyxFQUFFLFNBQWlCO1FBQzlDLHVCQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUVyQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQztTQUM5QztRQUFDLElBQUksQ0FB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LENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUMvRztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUMzRDs7OztZQTVJSixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFaUSxVQUFVO1lBUVYsTUFBTSx1QkFTMEIsTUFBTSxTQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIERvdENvZGUsXHJcbiAgUmVsYXRlZENvZGVcclxufSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2NvbmZpZyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbmd1bGFyRG90Y29kZXNTZXJ2aWNlIHtcclxuICBwcml2YXRlIGNvZGVzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQmVoYXZpb3JTdWJqZWN0PERvdENvZGVbXT4+KCk7XHJcbiAgcHJpdmF0ZSBjb2RlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgQmVoYXZpb3JTdWJqZWN0PERvdENvZGU+PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIEBJbmplY3QoJ2NvbmZpZycpIHByaXZhdGUgY29uZmlnOiBDb25maWcpIHtcclxuICAgIGlmICghY29uZmlnKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdDYWxsIEFuZ3VsYXJEb3Rjb2Rlc1NlcnZpY2Ugd2l0aCBmb3Igcm9vdCBwYXNzaW5nIGluIHRoZSBjb25maWcgb2JqZWN0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIE1ldGhvZCBHZXRDb2RlXHJcbiAgKiBAcGFyYW0gY29sdW1uIENvbHVtbiBuYW1lIHRvIGdldCBEb3Rjb2RlIGZyb21cclxuICAqIEBwYXJhbSBjb2RlVmFsdWUgVGhlIGNvZGUgdmFsdWUgdG8gcmV0cmlldmVcclxuICAqIEByZXR1cm4gRnVsbCBIVFRQIHJlc3BvbnNlIGFzIE9ic2VydmFibGVcclxuICAqL1xyXG4gIHB1YmxpYyBHZXRDb2RlKGNvbHVtbjogc3RyaW5nLCBjb2RlVmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8RG90Q29kZT4ge1xyXG4gICAgY29uc3Qga2V5ID0gYCR7Y29sdW1ufS0ke2NvZGVWYWx1ZX1gO1xyXG5cclxuICAgIGlmICh0aGlzLmNvZGVDYWNoZS5nZXQoa2V5KSkge1xyXG4gICAgICB0aGlzLmNvZGVDYWNoZS5nZXQoYCR7Y29sdW1ufS0ke2NvZGVWYWx1ZX1gKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jb2Rlc0NhY2hlLmdldChjb2x1bW4pKSB7XHJcbiAgICAgIGNvbnN0IGNvZGVzID0gdGhpcy5jb2Rlc0NhY2hlLmdldChjb2x1bW4pLnZhbHVlO1xyXG4gICAgICBpZiAoY29kZXMpIHtcclxuICAgICAgICBjb25zdCBjb2RlID0gY29kZXMuZmlsdGVyKGMgPT4gYy52YWx1ZSA9PT0gY29kZVZhbHVlKTtcclxuXHJcbiAgICAgICAgaWYgKGNvZGUgJiYgY29kZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jb2RlQ2FjaGUuZ2V0KGtleSkpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2RlQ2FjaGUuc2V0KGtleSwgbmV3IEJlaGF2aW9yU3ViamVjdDxEb3RDb2RlPihudWxsKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jb2RlQ2FjaGUuZ2V0KGtleSkubmV4dChjb2RlWzBdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sb2FkQ29kZXMoa2V5LCBjb2x1bW4sIGNvZGVWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZENvZGVzKGtleSwgY29sdW1uLCBjb2RlVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRDb2RlcyhrZXksIGNvbHVtbiwgY29kZVZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5jb2RlQ2FjaGUuZ2V0KGtleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRDb2RlcyhrZXk6IHN0cmluZywgY29sdW1uOiBzdHJpbmcsIGNvZGVWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNvZGVDYWNoZS5zZXQoa2V5LCBuZXcgQmVoYXZpb3JTdWJqZWN0PERvdENvZGU+KG51bGwpKTtcclxuXHJcbiAgICBjb25zdCB1cmkgPSBgL0dldENvZGVgO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcblxyXG4gICAgaWYgKGNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbiAhPT0gbnVsbCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdjb2x1bW4nLCBjb2x1bW4gKyAnJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29kZVZhbHVlICE9PSB1bmRlZmluZWQgJiYgY29kZVZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NvZGVWYWx1ZScsIGNvZGVWYWx1ZSArICcnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbmRSZXF1ZXN0PERvdENvZGU+KCdnZXQnLCB1cmksIGhlYWRlcnMsIHBhcmFtcywgbnVsbCkudG9Qcm9taXNlKCkudGhlbihiID0+IHtcclxuICAgICAgaWYgKGIgJiYgYi5ib2R5KSB7XHJcbiAgICAgICAgdGhpcy5jb2RlQ2FjaGUuZ2V0KGtleSkubmV4dChiLmJvZHkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgKiBNZXRob2QgR2V0Q29kZXNcclxuICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIG5hbWUgdG8gZ2V0IERvdGNvZGUgZnJvbVxyXG4gICogQHJldHVybiBGdWxsIEhUVFAgcmVzcG9uc2UgYXMgT2JzZXJ2YWJsZVxyXG4gICovXHJcbiAgcHVibGljIEdldENvZGVzKGNvbHVtbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb3RDb2RlW10+IHtcclxuICAgIGlmICh0aGlzLmNvZGVzQ2FjaGUuZ2V0KGNvbHVtbikpIHtcclxuICAgICAgdGhpcy5jb2Rlc0NhY2hlLmdldChjb2x1bW4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2Rlc0NhY2hlLnNldChjb2x1bW4sIG5ldyBCZWhhdmlvclN1YmplY3Q8RG90Q29kZVtdPihudWxsKSk7XHJcblxyXG4gICAgICBjb25zdCB1cmkgPSBgL0dldENvZGVzYDtcclxuICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgICAgaWYgKGNvbHVtbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoJ2NvbHVtbicsIGNvbHVtbiArICcnKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbmRSZXF1ZXN0PERvdENvZGVbXT4oJ2dldCcsIHVyaSwgaGVhZGVycywgcGFyYW1zLCBudWxsKS50b1Byb21pc2UoKS50aGVuKGIgPT4ge1xyXG4gICAgICAgIGlmIChiICYmIGIuYm9keSkge1xyXG4gICAgICAgICAgdGhpcy5jb2Rlc0NhY2hlLmdldChjb2x1bW4pLm5leHQoYi5ib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmNvZGVzQ2FjaGUuZ2V0KGNvbHVtbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIE1ldGhvZCBHZXRSZWxhdGVkQ29kZXNcclxuICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uIG5hbWUgZm9yIGRvdGNvZGVcclxuICAqIEBwYXJhbSBjb2RlVmFsdWUgRG90Q29kZSB2YWx1ZSB0byBnZXQgcmVsYXRlZCBjb2RlcyBmb3JcclxuICAqIEBwYXJhbSByZWxhdGVkQ29kZSBSZWxhdGVkIENvbHVtbiBuYW1lIHRvIGdldCBSZWxhdGVkIENvZGVzIGZyb21cclxuICAqIEByZXR1cm4gRnVsbCBIVFRQIHJlc3BvbnNlIGFzIE9ic2VydmFibGVcclxuICAqL1xyXG4gIHB1YmxpYyBHZXRSZWxhdGVkQ29kZXMoY29sdW1uOiBzdHJpbmcsIGNvZGVWYWx1ZTogc3RyaW5nLCByZWxhdGVkQ29kZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZWxhdGVkQ29kZVtdPiB7XHJcbiAgICBjb25zdCB1cmkgPSBgL0dldFJlbGF0ZWRDb2Rlc2A7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChjb2x1bW4gIT09IHVuZGVmaW5lZCAmJiBjb2x1bW4gIT09IG51bGwpIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgnY29sdW1uJywgY29sdW1uICsgJycpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvZGVWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNvZGVWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdjb2RlVmFsdWUnLCBjb2RlVmFsdWUgKyAnJyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVsYXRlZENvZGUgIT09IHVuZGVmaW5lZCAmJiByZWxhdGVkQ29kZSAhPT0gbnVsbCkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyZWxhdGVkQ29kZScsIHJlbGF0ZWRDb2RlICsgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNlbmRSZXF1ZXN0PFJlbGF0ZWRDb2RlW10+KCdnZXQnLCB1cmksIGhlYWRlcnMsIHBhcmFtcywgbnVsbCkucGlwZShcclxuICAgICAgbWFwKGIgPT4ge1xyXG4gICAgICAgIGlmIChiICYmIGIuYm9keSkge1xyXG4gICAgICAgICAgcmV0dXJuIGIuYm9keTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VuZFJlcXVlc3Q8VD4obWV0aG9kOiBzdHJpbmcsIHVyaTogc3RyaW5nLCBoZWFkZXJzOiBIdHRwSGVhZGVycywgcGFyYW1zOiBIdHRwUGFyYW1zLCBib2R5OiBhbnkpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxUPj4ge1xyXG4gICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdPY3AtQXBpbS1TdWJzY3JpcHRpb24tS2V5JywgdGhpcy5jb25maWcuYXBpS2V5KTtcclxuICAgIGlmIChtZXRob2QgPT09ICdnZXQnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuY29uZmlnLmhvc3QgKyB1cmksXHJcbiAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKSwgcGFyYW1zOiBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ3B1dCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8VD4odGhpcy5jb25maWcuaG9zdCArIHVyaSwgYm9keSxcclxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpLCBwYXJhbXM6IHBhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAncG9zdCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQ+KHRoaXMuY29uZmlnLmhvc3QgKyB1cmksIGJvZHksXHJcbiAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKSwgcGFyYW1zOiBwYXJhbXMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PT0gJ2RlbGV0ZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8VD4odGhpcy5jb25maWcuaG9zdCArIHVyaSwgeyBoZWFkZXJzOiBoZWFkZXJzLCBwYXJhbXM6IHBhcmFtcywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1Vuc3VwcG9ydGVkIHJlcXVlc3Q6ICcgKyBtZXRob2QpO1xyXG4gICAgICByZXR1cm4gT2JzZXJ2YWJsZS50aHJvdygnVW5zdXBwb3J0ZWQgcmVxdWVzdDogJyArIG1ldGhvZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==