{"version":3,"file":"fingerprintsoft-angular-spring-hal.mjs","sources":["../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/services/CustomEncoder.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/Utils.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/cache/cache.helper.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/models/resource.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/models/resource-array.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/models/resource-helper.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/services/external.service.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/services/resource.service.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/interceptor/TokenConfigService.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/interceptor/Auth.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/interceptor/AuthInterceptor.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/angular-hal.module.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/lib/services/rest.service.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/public-api.ts","../../../../projects/fingerprintsoft/angular-spring-hal/src/fingerprintsoft-angular-spring-hal.ts"],"sourcesContent":["import {HttpParameterCodec} from \"@angular/common/http\";\n\nexport class CustomEncoder implements HttpParameterCodec {\n    encodeKey(key: string): string {\n        return encodeURIComponent(key);\n    }\n\n    encodeValue(value: string): string {\n        return encodeURIComponent(value);\n    }\n\n    decodeKey(key: string): string {\n        return decodeURIComponent(key);\n    }\n\n    decodeValue(value: string): string {\n        return decodeURIComponent(value);\n    }\n}","// @dynamic\nexport class Utils {\n    public static isNullOrUndefined(value: any): boolean {\n        return value === null || value === undefined;\n    }\n\n    public static isPrimitive(value: any): boolean {\n        return (typeof value !== 'object' && typeof value !== 'function') || value === null;\n    }\n}\n","import { Resource } from '../models/resource';\nimport * as hash from 'hash.js';\nimport { HalOptions } from '../services/rest.service';\n\nexport type ResourceExpire<T extends Resource> = { entity: any, body?: any, params?: HalOptions, expire: number };\n\nexport enum EvictStrategy {\n    EvictTrivial,\n    EvictSmart\n}\n\n// @dynamic\nexport class CacheHelper {\n    private static cacheMap: Map<string, ResourceExpire<any>> = new Map<string, ResourceExpire<any>>();\n\n    static isActive = true;\n    // TODO\n    static maxEntries: number = 100;\n    static evictStrategy: EvictStrategy = EvictStrategy.EvictTrivial;\n    static defaultExpire: number = 10 * 60 * 1000; //10 minutes\n\n    static initClearCacheProcess() {\n        if (this.isActive) {\n            setInterval(() => {\n                Date.now();\n                if (CacheHelper.evictStrategy == EvictStrategy.EvictTrivial)\n                    this.evictAll();\n                else if (CacheHelper.evictStrategy == EvictStrategy.EvictSmart) {\n                    this.cacheMap.forEach((value: ResourceExpire<any>, key: string) => {\n                        if (value.expire > 0 && Date.now() > value.expire)\n                            this.evict(key);\n                    });\n                }\n            }, 15 * 60 * 1000);\n        }\n    }\n\n    static ifPresent<T extends Resource>(link: string, body?: string, params?: HalOptions, isActiveLocal: boolean = true): boolean {\n        if (!this.isActive || !isActiveLocal)\n            return false;\n        return this.cacheMap.has(CacheHelper.key(link, body, params));\n    }\n\n    static getArray<T extends Resource>(link: string, body?: string, params?: HalOptions): T[] {\n        return this.cacheMap.get(CacheHelper.key(link, body, params)).entity;\n    }\n\n    static putArray<T extends Resource>(link: string, array: T[], expireMs: number = 10 * 60 * 1000, body?: string, params?: HalOptions) {\n        if (this.isActive) {\n            let resourceExpire: ResourceExpire<T> = {entity: array, expire: CacheHelper.expireDate(expireMs)};\n            this.cacheMap.set(CacheHelper.key(link, body, params), resourceExpire);\n        }\n    }\n\n    static get<T extends Resource>(link: string, body?: string, params?: HalOptions): T {\n        return this.cacheMap.get(CacheHelper.key(link, body, params)).entity;\n    }\n\n    static put<T extends Resource>(link: string, array: T, expireMs: number = 10 * 60 * 1000, body?: string, params?: HalOptions) {\n        if (this.isActive) {\n            let resourceExpire: ResourceExpire<T> = {entity: array, expire: CacheHelper.expireDate(expireMs)};\n            this.cacheMap.set(CacheHelper.key(link, body, params), resourceExpire);\n        }\n    }\n\n    private static expireDate(expireMs: number): number {\n        if (expireMs == 0)\n            return 0;\n        return Date.now() + expireMs;\n    }\n\n    private static key(link: string, body?: string, halOptions?: HalOptions): string {\n\n        let k: string = link;\n        if (body)\n            k += body;\n\n        if (halOptions)\n            k += CacheHelper.toStringParams(halOptions);\n\n        let key: string = hash.sha256().update(k).digest('hex');\n        return key;\n    }\n\n    private static toStringParams(options: HalOptions) {\n        let s: string = '';\n        if (options.size) {\n            s = 'size=' + options.size.toString() + '&';\n        }\n\n        if (options.notPaged) {\n            s += 'notPaged=true&';\n        }\n\n        if (options.params) {\n            options.params.forEach(param => {\n                s += param.key + '=' + param.value + '&';\n            });\n        }\n\n        if (options.sort) {\n            options.sort.forEach(sortInfo => {\n                let sortString = '';\n                sortString = sortInfo.path ? sortString.concat(sortInfo.path) : sortString;\n                sortString = sortInfo.order ? sortString.concat(',').concat(sortInfo.order) : sortString;\n                s += 'sort' + sortString + '&';\n            });\n        }\n        return s;\n    }\n\n    static evict(key: string) {\n        this.cacheMap.delete(key);\n    }\n\n    static evictAll() {\n        this.cacheMap.clear();\n    }\n}\n","import { Observable, of as observableOf, throwError as observableThrowError } from 'rxjs';\n\nimport { catchError, map } from 'rxjs/operators';\nimport { HttpParams, HttpResponse } from '@angular/common/http';\nimport { ResourceHelper } from './resource-helper';\nimport { ResourceArray } from './resource-array';\n\nimport { HalOptions } from '../services/rest.service';\nimport { SubTypeBuilder } from './subtype-builder';\nimport { Injectable } from '@angular/core';\nimport { CustomEncoder } from '../services/CustomEncoder';\nimport { Utils } from '../Utils';\nimport { CacheHelper } from '../cache/cache.helper';\n\nexport type Link = { href: string, templated?: boolean };\nexport type Links = { [key: string]: Link };\n\n@Injectable()\nexport abstract class Resource {\n\n    public proxyUrl: string;\n    public rootUrl: string;\n\n    public _links: any;\n    public _subtypes: Map<string, any>;\n\n    public get subtypes(): Map<string, any> {\n        return this._subtypes;\n    }\n\n    public set subtypes(_subtypes: Map<string, any>) {\n        this._subtypes = _subtypes;\n    }\n\n    constructor() {\n    }\n\n    // Get self\n    public uri(): string {\n        if (!Utils.isNullOrUndefined(this._links) && !Utils.isNullOrUndefined(this._links['self'])) {\n            return ResourceHelper.getProxy(this._links['self'].href);\n        } else {\n            return null;\n        }\n    }\n\n    // Get rel uri\n    public relURI(rel: string): string {\n        if (!Utils.isNullOrUndefined(this._links) && !Utils.isNullOrUndefined(this._links[rel])) {\n            return ResourceHelper.getProxy(this._links[rel].href);\n        } else {\n            return null;\n        }\n    }\n\n    // Get related resource\n    public getRelation<T extends Resource>(type: { new(): T },\n                                           relation: string,\n                                           builder?: SubTypeBuilder,\n                                           expireMs: number = CacheHelper.defaultExpire,\n                                           isCacheActive: boolean = true): Observable<T> {\n        let result: T = new type();\n        if (this.existRelationLink(relation)) {\n            if (CacheHelper.ifPresent(this.getRelationLinkHref(relation), null, null, isCacheActive)) {\n                const cached: T = CacheHelper.get(this.getRelationLinkHref(relation));\n                return observableOf(cached);\n            }\n\n            let observable = ResourceHelper.getHttp().get(ResourceHelper.getProxy(this.getRelationLinkHref(relation)), {headers: ResourceHelper.headers});\n            return observable.pipe(map((data: any) => {\n                if (builder) {\n                    for (const embeddedClassName of Object.keys(data['_links'])) {\n                        if (embeddedClassName == 'self') {\n                            let href: string = data._links[embeddedClassName].href;\n                            let idx: number = href.lastIndexOf('/');\n                            let realClassName = href.replace(ResourceHelper.getRootUri(), '').substring(0, idx);\n                            result = ResourceHelper.searchSubtypes(builder, realClassName, result);\n                            break;\n                        }\n                    }\n                }\n                let resource: T = ResourceHelper.instantiateResource(result, data);\n                CacheHelper.put(this.getRelationLinkHref(relation), resource, expireMs);\n                return resource;\n            }));\n        } else {\n            return observableOf(null);\n        }\n    }\n\n    public addRelations<T extends Resource>(relation: string, resources: T[]): Observable<any> {\n        if (!Utils.isNullOrUndefined(this._links) && !Utils.isNullOrUndefined(this._links[relation])) {\n            let header = ResourceHelper.headers.append('Content-Type', 'text/uri-list');\n            let uris = resources.map(r => r._links.self.href).join('\\n');\n            return ResourceHelper.getHttp().post(ResourceHelper.getProxy(this._links[relation].href), uris, {headers: header});\n        } else {\n            return observableThrowError('no relation found');\n        }\n    }\n\n    public replaceRelations<T extends Resource>(relation: string, resources: T[]): Observable<any> {\n        if (!Utils.isNullOrUndefined(this._links) && !Utils.isNullOrUndefined(this._links[relation])) {\n            let header = ResourceHelper.headers.append('Content-Type', 'text/uri-list');\n            let uris = resources.map(r => r._links.self.href).join('\\n');\n            return ResourceHelper.getHttp().put(ResourceHelper.getProxy(this._links[relation].href), uris, {headers: header});\n        } else {\n            return observableThrowError('no relation found');\n        }\n    }\n\n\n    // Get collection of related resources\n    public getRelationArray<T extends Resource>(type: { new(): T },\n                                                relation: string,\n                                                _embedded?: string,\n                                                options?: HalOptions,\n                                                builder?: SubTypeBuilder,\n                                                expireMs: number = CacheHelper.defaultExpire,\n                                                isCacheActive: boolean = true): Observable<T[]> {\n\n        const params = ResourceHelper.optionParams(new HttpParams({encoder: new CustomEncoder()}), options);\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>(Utils.isNullOrUndefined(_embedded) ? '_embedded' : _embedded);\n        if (this.existRelationLink(relation)) {\n            if (CacheHelper.ifPresent(this.getRelationLinkHref(relation), null, options, isCacheActive))\n                return observableOf(CacheHelper.getArray(this.getRelationLinkHref(relation)));\n\n            let observable = ResourceHelper.getHttp().get(ResourceHelper.getProxy(this.getRelationLinkHref(relation)), {\n                headers: ResourceHelper.headers, observe: 'response', params: params,\n            });\n            return observable\n                .pipe(\n                    map(response => ResourceHelper.instantiateResourceCollection<T>(type, response, result, builder)),\n                    catchError(error => observableThrowError(error)),\n                ).pipe(map((array: ResourceArray<T>) => {\n                    CacheHelper.putArray(this.getRelationLinkHref(relation), array.result, expireMs);\n                    return array.result;\n                }));\n        } else {\n            return observableOf([]);\n        }\n    }\n\n    public getProjection<T extends Resource>(type: { new(): T },\n                                             resource: string,\n                                             id: string,\n                                             projectionName: string,\n                                             expireMs: number = CacheHelper.defaultExpire,\n                                             isCacheActive: boolean = true): Observable<T> {\n        const uri = this.getResourceUrl(resource).concat('/', id).concat('?projection=' + projectionName);\n        const result: T = new type();\n\n        if (CacheHelper.ifPresent(uri, null, null, isCacheActive)) {\n            const cached: T = CacheHelper.get(uri);\n            return observableOf(cached);\n        }\n\n        let observable = ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers});\n        return observable.pipe(\n            map(data => {\n                let resource: T = ResourceHelper.instantiateResource(result, data);\n                CacheHelper.put(uri, resource, expireMs);\n                return resource;\n            }),\n            catchError(error => observableThrowError(error)),\n        );\n    }\n\n    public getProjectionArray<T extends Resource>(type: { new(): T },\n                                                  resource: string,\n                                                  projectionName: string,\n                                                  expireMs: number = CacheHelper.defaultExpire,\n                                                  isCacheActive: boolean = true): Observable<T[]> {\n        const uri = this.getResourceUrl(resource).concat('?projection=' + projectionName);\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>('_embedded');\n\n        if (CacheHelper.ifPresent(uri, null, null, isCacheActive))\n            return observableOf(CacheHelper.getArray(uri));\n\n        let observable = ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, observe: 'response'});\n        return observable.pipe(\n            map(response => ResourceHelper.instantiateResourceCollection<T>(type, response, result)),\n            map((array: ResourceArray<T>) => {\n                CacheHelper.putArray(uri, array.result, expireMs);\n                return array.result;\n            }),\n        );\n    }\n\n    private getResourceUrl(resource?: string): string {\n        let url = ResourceHelper.getURL();\n        if (!url.endsWith('/')) {\n            url = url.concat('/');\n        }\n        if (resource) {\n            return url.concat(resource);\n        }\n\n        url = url.replace('{?projection}', '');\n        return url;\n    }\n\n    private getRelationLinkHref(relation: string) {\n        if (this._links[relation].templated)\n            return this._links[relation].href.replace('{?projection}', '');\n        return this._links[relation].href;\n    }\n\n    private existRelationLink(relation: string): boolean {\n        return !Utils.isNullOrUndefined(this._links) && !Utils.isNullOrUndefined(this._links[relation]);\n    }\n\n    // Adds the given resource to the bound collection by the relation\n    public addRelation<T extends Resource>(relation: string, resource: T): Observable<any> {\n        if (this.existRelationLink(relation)) {\n            let header = ResourceHelper.headers.append('Content-Type', 'text/uri-list');\n            return ResourceHelper.getHttp().post(ResourceHelper.getProxy(this.getRelationLinkHref(relation)), resource._links.self.href, {headers: header});\n        } else {\n            return observableThrowError('no relation found');\n        }\n    }\n\n    // Allow for resources that are verbs instead of nouns e.g. payment/changeofaddress etc.\n    public postRelation<T extends Resource>(relation: string, type: { new(): T }, resource: T = null): Observable<T> {\n        if (this.existRelationLink(relation)) {\n          let observable = ResourceHelper.getHttp().post(\n            ResourceHelper.getProxy(this.getRelationLinkHref(relation)),\n            resource,\n            {\n              headers: ResourceHelper.headers,\n              observe: 'response'\n            }\n          )\n          const result: T = new type();\n          return observable.pipe(\n            map((response: HttpResponse<any>) => {\n              return ResourceHelper.instantiateResourceFromResponse(result, response);\n            }),\n            catchError(error => observableThrowError(error)),\n          );\n        } else {\n            return observableThrowError('no payment relation found');\n        }\n    }\n\n\n    public updateRelation<T extends Resource>(relation: string, resource: T): Observable<any> {\n        if (this.existRelationLink(relation)) {\n            let header = ResourceHelper.headers.append('Content-Type', 'text/uri-list');\n            return ResourceHelper.getHttp().patch(ResourceHelper.getProxy(this.getRelationLinkHref(relation)), resource._links.self.href, {headers: header});\n        } else {\n            return observableThrowError('no relation found');\n        }\n    }\n\n    // Bind the given resource to this resource by the given relation\n    public substituteRelation<T extends Resource>(relation: string, resource: T): Observable<any> {\n        if (this.existRelationLink(relation)) {\n            let header = ResourceHelper.headers.append('Content-Type', 'text/uri-list');\n            return ResourceHelper.getHttp().put(ResourceHelper.getProxy(this.getRelationLinkHref(relation)), resource._links.self.href, {headers: header});\n        } else {\n            return observableThrowError('no relation found');\n        }\n    }\n\n    // Unbind the resource with the given relation from this resource\n    public deleteRelation<T extends Resource>(relation: string, resource: T): Observable<any> {\n        if (this.existRelationLink(relation)) {\n            let link: string = resource._links['self'].href;\n            let idx: number = link.lastIndexOf('/') + 1;\n\n            if (idx == -1)\n                return observableThrowError('no relation found');\n\n            let relationId: string = link.substring(idx);\n            return ResourceHelper.getHttp().delete(ResourceHelper.getProxy(this.getRelationLinkHref(relation) + '/' + relationId), {headers: ResourceHelper.headers});\n        } else {\n            return observableThrowError('no relation found');\n        }\n    }\n}\n","import { Observable, throwError as observableThrowError } from 'rxjs';\n\nimport { catchError, map } from 'rxjs/operators';\nimport { Sort } from './sort';\nimport { ArrayInterface } from './array-interface';\nimport { ResourceHelper } from './resource-helper';\nimport { Resource } from './resource';\nimport * as url from 'url';\n\n// @dynamic\nexport class ResourceArray<T extends Resource> implements ArrayInterface<T> {\n    public sortInfo: Sort[];\n\n    public proxyUrl: string;\n    public rootUrl: string;\n\n    public self_uri: string;\n    public next_uri: string;\n    public prev_uri: string;\n    public first_uri: string;\n    public last_uri: string;\n\n    public _embedded;\n\n    public totalElements = 0;\n    public totalPages = 1;\n    public pageNumber = 1;\n    public pageSize: number;\n\n    public result: T[] = [];\n\n    push = (el: T) => {\n        this.result.push(el);\n    };\n\n    length = (): number => {\n        return this.result.length;\n    };\n\n    private init = (type: { new(): T }, response: any, sortInfo: Sort[]): ResourceArray<T> => {\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>(this._embedded);\n        result.sortInfo = sortInfo;\n        ResourceHelper.instantiateResourceCollection(type, response, result);\n        return result;\n    };\n\n// Load next page\n    next = (type: { new(): T }): Observable<ResourceArray<T>> => {\n        if (this.next_uri) {\n            return ResourceHelper.getHttp().get(ResourceHelper.getProxy(this.next_uri), {headers: ResourceHelper.headers, observe: 'response'}).pipe(\n                map(response => this.init(type, response, this.sortInfo)),\n                catchError(error => observableThrowError(error)),);\n        }\n        return observableThrowError('no next defined');\n    };\n\n    prev = (type: { new(): T }): Observable<ResourceArray<T>> => {\n        if (this.prev_uri) {\n            return ResourceHelper.getHttp().get(ResourceHelper.getProxy(this.prev_uri), {headers: ResourceHelper.headers, observe: 'response'}).pipe(\n                map(response => this.init(type, response, this.sortInfo)),\n                catchError(error => observableThrowError(error)),);\n        }\n        return observableThrowError('no prev defined');\n    };\n\n// Load first page\n\n    first = (type: { new(): T }): Observable<ResourceArray<T>> => {\n        if (this.first_uri) {\n            return ResourceHelper.getHttp().get(ResourceHelper.getProxy(this.first_uri), {headers: ResourceHelper.headers, observe: 'response'}).pipe(\n                map(response => this.init(type, response, this.sortInfo)),\n                catchError(error => observableThrowError(error)),);\n        }\n        return observableThrowError('no first defined');\n    };\n\n// Load last page\n\n    last = (type: { new(): T }): Observable<ResourceArray<T>> => {\n        if (this.last_uri) {\n            return ResourceHelper.getHttp().get(ResourceHelper.getProxy(this.last_uri), {headers: ResourceHelper.headers, observe: 'response'}).pipe(\n                map(response => this.init(type, response, this.sortInfo)),\n                catchError(error => observableThrowError(error)),);\n        }\n        return observableThrowError('no last defined');\n    };\n\n// Load page with given pageNumber\n\n    page = (type: { new(): T }, pageNumber: number): Observable<ResourceArray<T>> => {\n        this.self_uri = this.self_uri.replace('{?page,size,sort,projection}', '');\n        this.self_uri = this.self_uri.replace('{&sort}', '');\n        let urlParsed = url.parse(ResourceHelper.getProxy(this.self_uri));\n        let query: string = ResourceArray.replaceOrAdd(urlParsed.query, 'size', this.pageSize.toString());\n        query = ResourceArray.replaceOrAdd(query, 'page', pageNumber.toString());\n\n\n        let uri = urlParsed.query ?\n            ResourceHelper.getProxy(this.self_uri).replace(urlParsed.query, query) : ResourceHelper.getProxy(this.self_uri).concat(query);\n        uri = this.addSortInfo(uri);\n        return ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, observe: 'response'}).pipe(\n            map(response => this.init(type, response, this.sortInfo)),\n            catchError(error => observableThrowError(error)),);\n    };\n\n// Sort collection based on given sort attribute\n\n\n    sortElements = (type: { new(): T }, ...sort: Sort[]): Observable<ResourceArray<T>> => {\n        this.self_uri = this.self_uri.replace('{?page,size,sort}', '');\n        this.self_uri = this.self_uri.replace('{&sort}', '');\n        let uri = ResourceHelper.getProxy(this.self_uri).concat('?', 'size=', this.pageSize.toString(), '&page=', this.pageNumber.toString());\n        uri = this.addSortInfo(uri);\n        return ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, observe: 'response'}).pipe(\n            map(response => this.init(type, response, sort)),\n            catchError(error => observableThrowError(error)),);\n    };\n\n// Load page with given size\n\n    size = (type: { new(): T }, size: number): Observable<ResourceArray<T>> => {\n        let uri = ResourceHelper.getProxy(this.self_uri).concat('?', 'size=', size.toString());\n        uri = this.addSortInfo(uri);\n        return ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, observe: 'response'}).pipe(\n            map(response => this.init(type, response, this.sortInfo)),\n            catchError(error => observableThrowError(error)),);\n    };\n\n    private addSortInfo(uri: string) {\n        if (this.sortInfo) {\n            for (const item of this.sortInfo) {\n                uri = uri.concat('&sort=', item.path, ',', item.order);\n            }\n        }\n        return uri;\n    }\n\n    private static replaceOrAdd(query: string, field: string, value: string): string {\n        if (query) {\n            let idx: number = query.indexOf(field);\n            let idxNextAmp: number = query.indexOf('&', idx) == -1 ? query.indexOf('/', idx) : query.indexOf('&', idx);\n\n            if (idx != -1) {\n                let seachValue = query.substring(idx, idxNextAmp);\n                query = query.replace(seachValue, field + '=' + value);\n            } else {\n                query = query.concat(\"&\" + field + '=' + value);\n            }\n        } else {\n            query = \"?\" + field + '=' + value;\n        }\n        return query;\n    }\n}\n","import { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Resource } from './index';\nimport { ResourceArray } from './index';\nimport { HalOptions, HalParam } from '../services/rest.service';\nimport { SubTypeBuilder } from './index';\nimport * as url from 'url';\nimport { Utils } from '../Utils';\n\n// @dynamic\nexport class ResourceHelper {\n\n    private static readonly URL_TEMPLATE_VAR_REGEXP = /{[^}]*}/g;\n    private static readonly EMPTY_STRING = '';\n    private static _headers: HttpHeaders;\n    private static proxy_uri: string;\n    private static root_uri: string;\n    private static http: HttpClient;\n\n    public static get headers(): HttpHeaders {\n        if (Utils.isNullOrUndefined(this._headers))\n            this._headers = new HttpHeaders();\n        return this._headers;\n    }\n\n    public static set headers(headers: HttpHeaders) {\n        this._headers = headers;\n    }\n\n    static optionParams(params: HttpParams, options?: HalOptions): HttpParams {\n        if (options) {\n\n            params = this.params(params, options.params);\n\n            if (options.size) {\n                params = params.append('size', options.size.toString());\n            }\n\n            if (options.sort) {\n                for (const s of options.sort) {\n                    let sortString = '';\n                    sortString = s.path ? sortString.concat(s.path) : sortString;\n                    sortString = s.order ? sortString.concat(',').concat(s.order) : sortString;\n                    params = params.append('sort', sortString);\n                }\n            }\n\n        }\n        return params;\n    }\n\n    static params(httpParams: HttpParams, params?: HalParam[]) {\n        if (params) {\n            for (const param of params) {\n                httpParams = httpParams.append(param.key, param.value.toString());\n            }\n        }\n\n        return httpParams;\n    }\n\n    static resolveRelations(resource: Resource): Object {\n        const result: any = {};\n        for (const key in resource) {\n            if (!Utils.isNullOrUndefined(resource[key])) {\n                if (ResourceHelper.className(resource[key])\n                    .find((className: string) => className == 'Resource') || resource[key]['_links']) {\n                    if (resource[key]['_links'])\n                        result[key] = resource[key]['_links']['self']['href'];\n                } else if (Array.isArray(resource[key])) {\n                    let array: any[] = resource[key];\n                    if (array) {\n                        result[key] = new Array();\n                        array.forEach((element) => {\n                            if (Utils.isPrimitive(element)) {\n                                result[key].push(element);\n                            } else {\n                                result[key].push(this.resolveRelations(element));\n                            }\n                        });\n                    }\n                } else {\n                    result[key] = resource[key];\n                }\n            }\n        }\n        return result as Object;\n    }\n\n    static createEmptyResult<T extends Resource>(_embedded: string): ResourceArray<T> {\n        let resourceArray: ResourceArray<T> = new ResourceArray<T>();\n        resourceArray._embedded = _embedded;\n        return resourceArray;\n    }\n\n    static getClassName(obj: any): string {\n        var funcNameRegex = /function (.+?)\\(/;\n        var results = (funcNameRegex).exec(obj.constructor.toString());\n        return (results && results.length > 1) ? results[1] : '';\n    }\n\n    static className(objProto: any): string[] {\n        let classNames = [];\n        let obj = Object.getPrototypeOf(objProto);\n        let className: string;\n\n        while ((className = ResourceHelper.getClassName(obj)) !== 'Object') {\n            classNames.push(className);\n            obj = Object.getPrototypeOf(obj);\n        }\n\n        return classNames;\n    }\n\n    static instantiateResourceFromResponse<T extends Resource>(entity: T, response: HttpResponse<any>): T {\n        if (response.status >= 200 && response.status <= 207) {\n            return ResourceHelper.instantiateResource(entity, response.body);\n        } else if (response.status == 404) {\n            return null;\n        }\n    }\n\n    static instantiateResourceCollection<T extends Resource>(type: { new(): T }, response: HttpResponse<any>,\n                                                             result: ResourceArray<T>, builder?: SubTypeBuilder): ResourceArray<T> {\n\n        if (response.status >= 200 && response.status <= 207) {\n            let payload = response.body;\n            if (payload[result._embedded]) {\n                for (const embeddedClassName of Object.keys(payload[result._embedded])) {\n                    let embedded: any = payload[result._embedded];\n                    const items = embedded[embeddedClassName];\n                    for (let item of items) {\n                        let instance: T = new type();\n                        instance = this.searchSubtypes(builder, embeddedClassName, instance);\n\n                        this.instantiateResource(instance, item);\n                        result.push(instance);\n                    }\n                }\n            }\n\n            result.totalElements = payload.page ? payload.page.totalElements : result.length;\n            result.totalPages = payload.page ? payload.page.totalPages : 1;\n            result.pageNumber = payload.page ? payload.page.number : 1;\n            result.pageSize = payload.page ? payload.page.size : 20;\n\n            result.self_uri = payload._links && payload._links.self ? payload._links.self.href : undefined;\n            result.next_uri = payload._links && payload._links.next ? payload._links.next.href : undefined;\n            result.prev_uri = payload._links && payload._links.prev ? payload._links.prev.href : undefined;\n            result.first_uri = payload._links && payload._links.first ? payload._links.first.href : undefined;\n            result.last_uri = payload._links && payload._links.last ? payload._links.last.href : undefined;\n        } else if (response.status == 404) {\n            result.result = [];\n        }\n        return result;\n    }\n\n    static searchSubtypes<T extends Resource>(builder: SubTypeBuilder, embeddedClassName: string, instance: T) {\n        if (builder && builder.subtypes) {\n            let keys = builder.subtypes.keys();\n            Array.from(keys).forEach((subtypeKey: string) => {\n                if (embeddedClassName.toLowerCase().startsWith(subtypeKey.toLowerCase())) {\n                    let subtype: { new(): any } = builder.subtypes.get(subtypeKey);\n                    instance = new subtype();\n                }\n            });\n        }\n        return instance;\n    }\n\n    static instantiateResource<T extends Resource>(entity: T, payload: Object): T {\n        for (const p in payload) {\n            //TODO array initClearCacheProcess\n            /* if(entity[p].constructor === Array && isNullOrUndefined(payload[p]))\n                 entity[p] = [];\n             else*/\n            entity[p] = payload[p];\n        }\n        return entity;\n    }\n\n    static setProxyUri(proxy_uri: string) {\n        ResourceHelper.proxy_uri = proxy_uri;\n    }\n\n    static setRootUri(root_uri: string) {\n        ResourceHelper.root_uri = root_uri;\n    }\n\n    public static getURL(): string {\n        return ResourceHelper.proxy_uri && ResourceHelper.proxy_uri != '' ?\n            ResourceHelper.addSlash(ResourceHelper.proxy_uri) :\n            ResourceHelper.addSlash(ResourceHelper.root_uri);\n    }\n\n    private static addSlash(uri: string): string {\n        let uriParsed = url.parse(uri);\n        if (Utils.isNullOrUndefined(uriParsed.search) && uri && uri[uri.length - 1] != '/')\n            return uri + '/';\n        return uri;\n    }\n\n    public static getProxy(url: string): string {\n        url = url.replace('{?projection}', '');\n        if (!ResourceHelper.proxy_uri || ResourceHelper.proxy_uri == '')\n            return url;\n        return ResourceHelper.addSlash(\n            ResourceHelper.removeUrlTemplateVars(url)\n                .replace(ResourceHelper.root_uri, ResourceHelper.proxy_uri));\n    }\n\n    private static removeUrlTemplateVars(url: string) {\n        return url.replace(ResourceHelper.URL_TEMPLATE_VAR_REGEXP, ResourceHelper.EMPTY_STRING);\n    }\n\n    public static setHttp(http: HttpClient) {\n        this.http = http;\n    }\n\n    public static getHttp(): HttpClient {\n        return this.http;\n    }\n\n    static getRootUri() {\n        return this.root_uri;\n    }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Inject, Injectable} from '@angular/core';\nimport {ResourceHelper} from '../models/resource-helper';\nimport {ExternalConfigurationHandlerInterface} from './external-configuration.handler';\nimport {ExternalConfiguration} from './ExternalConfiguration';\nimport {CacheHelper} from '../cache/cache.helper';\n\n@Injectable()\nexport class ExternalService {\n\n    constructor(@Inject('ExternalConfigurationService') private externalConfigurationService: ExternalConfigurationHandlerInterface) {\n        ResourceHelper.setProxyUri(externalConfigurationService.getProxyUri());\n        ResourceHelper.setRootUri(externalConfigurationService.getRootUri());\n        ResourceHelper.setHttp(externalConfigurationService.getHttp());\n        CacheHelper.initClearCacheProcess()\n    }\n\n    public updateExternalConfigurationHandlerInterface(externalConfigurationService: ExternalConfigurationHandlerInterface) {\n\tthis.externalConfigurationService = externalConfigurationService;\n\n        ResourceHelper.setProxyUri(externalConfigurationService.getProxyUri());\n        ResourceHelper.setRootUri(externalConfigurationService.getRootUri());\n        ResourceHelper.setHttp(externalConfigurationService.getHttp());\n    }\n\n    public getExternalConfiguration(): ExternalConfiguration {\n        return this.externalConfigurationService.getExternalConfiguration();\n    }\n\n    public getProxyUri(): string {\n        return this.externalConfigurationService.getProxyUri();\n    }\n\n    public getRootUri(): string {\n        return this.externalConfigurationService.getRootUri();\n    }\n\n    public getURL(): string {\n        return ResourceHelper.getURL();\n    }\n\n    public getHttp(): HttpClient {\n        return ResourceHelper.getHttp();\n    }\n}\n","import { Observable, throwError as observableThrowError } from 'rxjs';\n\nimport { catchError, map } from 'rxjs/operators';\nimport { Resource } from '../models/resource';\nimport { ResourceHelper } from '../models/resource-helper';\nimport { Injectable } from '@angular/core';\nimport { HttpParams, HttpResponse } from '@angular/common/http';\nimport { Sort } from '../models';\nimport { ResourceArray } from '../models';\nimport { ExternalService } from './external.service';\nimport { HalOptions, HalParam } from './rest.service';\nimport { SubTypeBuilder } from '../models';\nimport { CustomEncoder } from './CustomEncoder';\nimport * as url from 'url';\n\n// @dynamic\n@Injectable()\nexport class ResourceService {\n\n    constructor(private externalService: ExternalService) {\n    }\n\n    private static getURL(): string {\n        return ResourceHelper.getURL();\n    }\n\n    public getAll<T extends Resource>(type: { new(): T }, resource: string, _embedded: string, options?: HalOptions, subType?: SubTypeBuilder): Observable<ResourceArray<T>> {\n        const uri = this.getResourceUrl(resource);\n        const params = ResourceHelper.optionParams(new HttpParams({encoder: new CustomEncoder()}), options);\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>(_embedded);\n\n        this.setUrls(result);\n        result.sortInfo = options ? options.sort : undefined;\n        let observable = ResourceHelper.getHttp().get(uri, {\n            headers: ResourceHelper.headers,\n            observe: 'response',\n            params: params,\n        });\n        return observable.pipe(map(response => ResourceHelper.instantiateResourceCollection(type, response, result, subType)),\n            catchError(error => observableThrowError(error)));\n    }\n\n    public get<T extends Resource>(type: { new(): T }, resource: string, id: any, params?: HalParam[], builder?: SubTypeBuilder): Observable<T> {\n        let self = this;\n        const uri = this.getResourceUrl(resource).concat('/', id);\n\n        let result: T = new type();\n        const httpParams = ResourceHelper.params(new HttpParams(), params);\n\n        this.setUrlsResource(result);\n        let observable = ResourceHelper.getHttp().get(uri, {\n            headers: ResourceHelper.headers,\n            observe: 'response',\n            params: httpParams,\n        });\n        // return observable.pipe(map(data => ResourceHelper.instantiateResource(result, data)),\n        //     catchError(error => observableThrowError(error)),);\n\n        return observable.pipe(\n            map((response: HttpResponse<any>) => {\n                if (builder) {\n                    let linkHref = url.parse(response.body._links.self.href).pathname;\n                    let regex = /([A-Za-z0-9]+)\\/([A-Za-z0-9]+)\\/([A-Za-z0-9]+)/g;\n                    let match = regex.exec(linkHref);\n                    if (match != null) {\n                        let embeddedClassName = match[2];\n                        result = ResourceHelper.searchSubtypes(builder, embeddedClassName, result);\n                    }\n                }\n                return ResourceHelper.instantiateResourceFromResponse(result, response);\n            }),\n            catchError(error => observableThrowError(error)),\n        );\n    }\n\n    public selfURI<T extends Resource>(type: { new(): T }, resource: string, id: any): string {\n        return this.getResourceUrl(resource).concat('/', id);\n    }\n\n    public getBySelfLink<T extends Resource>(type: { new(): T }, resourceLink: string): Observable<T> {\n        const result: T = new type();\n\n        this.setUrlsResource(result);\n        let observable = ResourceHelper.getHttp().get(ResourceHelper.getProxy(resourceLink), {headers: ResourceHelper.headers});\n        return observable.pipe(map(data => ResourceHelper.instantiateResource(result, data)),\n            catchError(error => observableThrowError(error)),);\n    }\n\n    public search<T extends Resource>(type: { new(): T }, query: string, resource: string, _embedded: string, options?: HalOptions,\n                                      subType?: SubTypeBuilder): Observable<ResourceArray<T>> {\n        const uri = this.getResourceUrl(resource).concat('/search/', query);\n        const params = ResourceHelper.optionParams(new HttpParams({encoder: new CustomEncoder()}), options);\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>(_embedded);\n\n        this.setUrls(result);\n        let observable = ResourceHelper.getHttp().get(uri, {\n            headers: ResourceHelper.headers,\n            observe: 'response',\n            params: params,\n        });\n        return observable.pipe(map(response => ResourceHelper.instantiateResourceCollection(type, response, result, subType)),\n            catchError(error => observableThrowError(error)),);\n    }\n\n    public searchSingle<T extends Resource>(type: { new(): T }, query: string, resource: string, options?: HalOptions): Observable<T> {\n        const uri = this.getResourceUrl(resource).concat('/search/', query);\n        const params = ResourceHelper.optionParams(new HttpParams({encoder: new CustomEncoder()}), options);\n        const result: T = new type();\n\n        this.setUrlsResource(result);\n        let observable = ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, params: params});\n        return observable.pipe(map(response => ResourceHelper.instantiateResource(result, response)),\n            catchError(error => observableThrowError(error)),);\n    }\n\n    public customQuery<T extends Resource>(type: { new(): T }, query: string, resource: string, _embedded: string, options?: HalOptions, subType?: SubTypeBuilder): Observable<ResourceArray<T>> {\n        const uri = this.getResourceUrl(resource + query);\n        const params = ResourceHelper.optionParams(new HttpParams({encoder: new CustomEncoder()}), options);\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>(_embedded);\n\n        this.setUrls(result);\n        let observable = ResourceHelper.getHttp().get(uri, {\n            headers: ResourceHelper.headers,\n            observe: 'response',\n            params: params,\n        });\n        return observable.pipe(map(response => ResourceHelper.instantiateResourceCollection(type, response, result, subType)),\n            catchError(error => observableThrowError(error)));\n    }\n\n    public customQueryPost<T extends Resource>(type: { new(): T }, query: string, resource: string,\n                                               _embedded: string, options?: HalOptions, body?: any,\n                                               subType?: SubTypeBuilder): Observable<ResourceArray<T>> {\n        const uri = this.getResourceUrl(resource + query);\n        const params = ResourceHelper.optionParams(new HttpParams(), options);\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>(_embedded);\n\n        this.setUrls(result);\n        let observable = ResourceHelper.getHttp().post(uri, body, {\n            headers: ResourceHelper.headers,\n            observe: 'response',\n            params: params,\n        });\n        return observable.pipe(map(response => ResourceHelper.instantiateResourceCollection(type, response, result, subType)),\n            catchError(error => observableThrowError(error)));\n    }\n\n    public getByRelation<T extends Resource>(type: { new(): T }, resourceLink: string): Observable<T> {\n        let result: T = new type();\n\n        this.setUrlsResource(result);\n        let observable = ResourceHelper.getHttp().get(resourceLink, {headers: ResourceHelper.headers});\n        return observable.pipe(map(data => ResourceHelper.instantiateResource(result, data)),\n            catchError(error => observableThrowError(error)));\n    }\n\n    public getByRelationArray<T extends Resource>(type: { new(): T }, resourceLink: string, _embedded: string, builder?: SubTypeBuilder): Observable<ResourceArray<T>> {\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>(_embedded);\n\n        this.setUrls(result);\n        let observable = ResourceHelper.getHttp().get(resourceLink, {\n            headers: ResourceHelper.headers,\n            observe: 'response',\n        });\n        return observable.pipe(\n            map(response => ResourceHelper.instantiateResourceCollection(type, response, result, builder)),\n            catchError(error => observableThrowError(error)),\n        );\n    }\n\n    public getProjection<T extends Resource>(type: { new(): T }, resource: string, id: string, projectionName: string): Observable<T> {\n        const uri = this.getResourceUrl(resource).concat('/', id).concat('?projection=' + projectionName);\n        const result: T = new type();\n\n        let observable = ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers});\n        return observable.pipe(\n            map(data => ResourceHelper.instantiateResource(result, data)),\n            catchError(error => observableThrowError(error)),\n        );\n    }\n\n    public getProjectionArray<T extends Resource>(type: { new(): T }, resource: string, projectionName: string): Observable<T[]> {\n        const uri = this.getResourceUrl(resource).concat('?projection=' + projectionName);\n        const result: ResourceArray<T> = ResourceHelper.createEmptyResult<T>('_embedded');\n\n        let observable = ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, observe: 'response'});\n        return observable\n            .pipe(\n                map(response => ResourceHelper.instantiateResourceCollection<T>(type, response, result)),\n                catchError(error => observableThrowError(error)),\n            ).pipe(map((resourceArray: ResourceArray<T>) => {\n                return resourceArray.result;\n            }));\n    }\n\n    public count(resource: string, query?: string, options?: HalOptions): Observable<number> {\n        const uri = this.getResourceUrl(resource).concat('/search/' + (query === undefined ? 'countAll' : query));\n        const params = ResourceHelper.optionParams(new HttpParams(), options);\n\n        return ResourceHelper.getHttp().get(uri, {\n            headers: ResourceHelper.headers,\n            observe: 'response',\n            params: params,\n        }).pipe(\n            map((response: HttpResponse<number>) => Number(response.body)),\n            catchError(error => observableThrowError(error)));\n    }\n\n    public create<T extends Resource>(selfResource: string, entity: T) {\n        const uri = ResourceHelper.getURL() + selfResource;\n        const payload = ResourceHelper.resolveRelations(entity);\n\n        this.setUrlsResource(entity);\n        let observable = ResourceHelper.getHttp().post(uri, payload, {\n            headers: ResourceHelper.headers,\n            observe: 'response',\n        });\n        return observable.pipe(map((response: HttpResponse<string>) => {\n            if (response.status >= 200 && response.status <= 207)\n                return ResourceHelper.instantiateResource(entity, response.body);\n            else if (response.status == 500) {\n                let body: any = response.body;\n                return observableThrowError(body.error);\n            }\n        }), catchError(error => observableThrowError(error)));\n    }\n\n    public query(resource: string, query: string, options?: HalOptions): Observable<any> {\n        const uri = this.getResourceUrl(resource).concat('/search/', query);\n        const params = ResourceHelper.optionParams(new HttpParams(), options);\n\n        return ResourceHelper.getHttp().get(uri, {headers: ResourceHelper.headers, params: params}).pipe(\n            map(response => response),\n            catchError(error => observableThrowError(error)),);\n    }\n\n    public update<T extends Resource>(entity: T) {\n        const uri = ResourceHelper.getProxy(entity._links.self.href);\n        const payload = ResourceHelper.resolveRelations(entity);\n        this.setUrlsResource(entity);\n        let observable = ResourceHelper.getHttp().put(uri, payload, {headers: ResourceHelper.headers, observe: 'response'});\n        return observable.pipe(map((response: HttpResponse<string>) => {\n            if (response.status >= 200 && response.status <= 207)\n                return ResourceHelper.instantiateResource(entity, response.body);\n            else if (response.status == 500) {\n                let body: any = response.body;\n                return observableThrowError(body.error);\n            }\n        }), catchError(error => observableThrowError(error)));\n    }\n\n    public patch<T extends Resource>(entity: T) {\n        const uri = ResourceHelper.getProxy(entity._links.self.href);\n        const payload = ResourceHelper.resolveRelations(entity);\n        this.setUrlsResource(entity);\n        let observable = ResourceHelper.getHttp().patch(uri, payload, {headers: ResourceHelper.headers, observe: 'response'});\n        return observable.pipe(map((response: HttpResponse<string>) => {\n            if (response.status >= 200 && response.status <= 207)\n                return ResourceHelper.instantiateResource(entity, response.body);\n            else if (response.status == 500) {\n                let body: any = response.body;\n                return observableThrowError(body.error);\n            }\n        }), catchError(error => observableThrowError(error)));\n    }\n\n    public delete<T extends Resource>(entity: T): Observable<Object> {\n        const uri = ResourceHelper.getProxy(entity._links.self.href);\n        return ResourceHelper.getHttp().delete(uri, {headers: ResourceHelper.headers}).pipe(catchError(error => observableThrowError(error)));\n    }\n\n    public hasNext<T extends Resource>(resourceArray: ResourceArray<T>): boolean {\n        return resourceArray.next_uri != undefined;\n    }\n\n    public hasPrev<T extends Resource>(resourceArray: ResourceArray<T>): boolean {\n        return resourceArray.prev_uri != undefined;\n    }\n\n    public hasFirst<T extends Resource>(resourceArray: ResourceArray<T>): boolean {\n        return resourceArray.first_uri != undefined;\n    }\n\n    public hasLast<T extends Resource>(resourceArray: ResourceArray<T>): boolean {\n        return resourceArray.last_uri != undefined;\n    }\n\n    public next<T extends Resource>(resourceArray: ResourceArray<T>, type: { new(): T }): Observable<ResourceArray<T>> {\n        return resourceArray.next(type);\n    }\n\n    public prev<T extends Resource>(resourceArray: ResourceArray<T>, type: { new(): T }): Observable<ResourceArray<T>> {\n        return resourceArray.prev(type);\n    }\n\n    public first<T extends Resource>(resourceArray: ResourceArray<T>, type: { new(): T }): Observable<ResourceArray<T>> {\n        return resourceArray.first(type);\n    }\n\n    public last<T extends Resource>(resourceArray: ResourceArray<T>, type: { new(): T }): Observable<ResourceArray<T>> {\n        return resourceArray.last(type);\n    }\n\n    public page<T extends Resource>(resourceArray: ResourceArray<T>, type: { new(): T }, id: number): Observable<ResourceArray<T>> {\n        return resourceArray.page(type, id);\n    }\n\n    public sortElements<T extends Resource>(resourceArray: ResourceArray<T>, type: { new(): T }, ...sort: Sort[]): Observable<ResourceArray<T>> {\n        return resourceArray.sortElements(type, ...sort);\n    }\n\n    public size<T extends Resource>(resourceArray: ResourceArray<T>, type: { new(): T }, size: number): Observable<ResourceArray<T>> {\n        return resourceArray.size(type, size);\n    }\n\n    private getResourceUrl(resource?: string): string {\n        let url: string = ResourceService.getURL();\n        if (!url.endsWith('/')) {\n            url = url.concat('/');\n        }\n        if (resource) {\n            return url.concat(resource);\n        }\n\n        url = url.replace('{?projection}', '');\n        return url;\n    }\n\n    private setUrls<T extends Resource>(result: ResourceArray<T>) {\n        result.proxyUrl = this.externalService.getProxyUri();\n        result.rootUrl = this.externalService.getRootUri();\n    }\n\n    private setUrlsResource<T extends Resource>(result: T) {\n        result.proxyUrl = this.externalService.getProxyUri();\n        result.rootUrl = this.externalService.getRootUri();\n    }\n}\n","import {Injectable, InjectionToken} from \"@angular/core\";\nimport {TokenConfig} from \"../models/TokenConfig\";\n\nexport const TokenConfigService = new InjectionToken<TokenConfig>(\"TokenConfig\");\n","export class Auth {\n    access_token: string;\n}\n","import {Inject, Injectable} from \"@angular/core\";\nimport {HttpEvent, HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest} from \"@angular/common/http\";\nimport {TokenConfigService} from \"./TokenConfigService\";\nimport {Observable} from \"rxjs\";\nimport {Auth} from \"./Auth\";\n\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\n    constructor(@Inject(TokenConfigService) private config) {}\n\n    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n        // add authorization header with jwt token if available\n        if(this.config) {\n            const token: Auth = Object.assign(Auth , JSON.parse(sessionStorage.getItem(this.config.token)));\n            if (token && !request.url.endsWith('oauth/token')) {\n                const headers = new HttpHeaders({\n                    'Authorization': 'Bearer ' + token.access_token,\n                    'Content-Type': 'application/json'\n                });\n                request = request.clone({headers});\n            }\n        }\n\n        return next.handle(request);\n    }\n}\n\n\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { HTTP_INTERCEPTORS, HttpClient, HttpClientModule } from '@angular/common/http';\nimport { ExternalService } from './services/external.service';\nimport { ResourceService } from './services/resource.service';\nimport { TokenConfig } from './models/TokenConfig';\nimport { AuthInterceptor } from './interceptor/AuthInterceptor';\nimport { TokenConfigService } from './interceptor/TokenConfigService';\n\n\n@NgModule({\n  imports: [HttpClientModule],\n  declarations: [],\n  exports: [HttpClientModule],\n  providers: [\n    ExternalService,\n    HttpClient,\n    {\n      provide: ResourceService,\n      useClass: ResourceService,\n      deps: [ExternalService],\n    }],\n})\nexport class AngularHalModule {\n  static forRoot(tokenConfig?: TokenConfig): ModuleWithProviders<AngularHalModule> {\n    return {\n      ngModule: AngularHalModule,\n      providers: [\n        ExternalService,\n        HttpClient,\n        {\n          provide: HTTP_INTERCEPTORS,\n          useClass: AuthInterceptor,\n          multi: true,\n          deps: [TokenConfigService],\n        },\n        {\n          provide: TokenConfigService,\n          useValue: tokenConfig == null ? '' : tokenConfig,\n        },\n        {\n          provide: ResourceService,\n          useClass: ResourceService,\n          deps: [ExternalService],\n        },\n      ],\n    };\n  }\n}\n","import { of as observableOf, throwError as observableThrowError } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { Resource } from '../models/resource';\nimport { ResourceArray } from '../models/resource-array';\nimport { Sort } from '../models/sort';\nimport { ResourceService } from './resource.service';\nimport { SubTypeBuilder } from '../models/subtype-builder';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { Injector } from '@angular/core';\nimport { Utils } from '../Utils';\n\nexport type HalParam = { key: string, value: string | number | boolean };\nexport type HalOptions = { notPaged?: boolean, size?: number, sort?: Sort[], params?: HalParam[] };\n\n// @dynamic\nexport class RestService<T extends Resource> {\n    private type: any;\n    private resource: string;\n    public resourceArray: ResourceArray<T>;\n    private resourceService: ResourceService;\n\n    private _embedded: string = '_embedded';\n\n    constructor(type: { new(): T },\n                resource: string,\n                private injector: Injector,\n                _embedded?: string) {\n        this.type = type;\n        this.resource = resource;\n        this.resourceService = injector.get(ResourceService);\n        if (!Utils.isNullOrUndefined(_embedded))\n            this._embedded = _embedded;\n    }\n\n    protected handleError(error: any): Observable<never> {\n        return RestService.handleError(error);\n    }\n\n    protected static handleError(error: any): Observable<never> {\n        return observableThrowError(error);\n    }\n\n    public getAll(options?: HalOptions, subType?: SubTypeBuilder): Observable<T[]> {\n        return this.resourceService.getAll(this.type, this.resource, this._embedded, options, subType).pipe(\n            mergeMap((resourceArray: ResourceArray<T>) => {\n                if (options && options.notPaged && !Utils.isNullOrUndefined(resourceArray.first_uri)) {\n                    options.notPaged = false;\n                    options.size = resourceArray.totalElements;\n                    return this.getAll(options);\n                } else {\n                    this.resourceArray = resourceArray;\n                    return observableOf(resourceArray.result);\n                }\n            }));\n    }\n\n    public get(id: any, params?: HalParam[], builder?: SubTypeBuilder): Observable<T> {\n        return this.resourceService.get(this.type, this.resource, id, params, builder);\n    }\n\n    public selfURI(id: any): string {\n        return this.resourceService.selfURI(this.type, this.resource, id);\n    }\n\n    public getBySelfLink(selfLink: string): Observable<T> {\n        return this.resourceService.getBySelfLink(this.type, selfLink);\n    }\n\n    public search(query: string, options?: HalOptions, subType?: SubTypeBuilder): Observable<T[]> {\n        return this.resourceService.search(this.type, query, this.resource, this._embedded, options, subType).pipe(\n            mergeMap((resourceArray: ResourceArray<T>) => {\n                if (options && options.notPaged && !Utils.isNullOrUndefined(resourceArray.first_uri)) {\n                    options.notPaged = false;\n                    options.size = resourceArray.totalElements;\n                    return this.search(query, options, subType);\n                } else {\n                    this.resourceArray = resourceArray;\n                    return observableOf(resourceArray.result);\n                }\n            }));\n    }\n\n    public query(query: string, options?: HalOptions): Observable<any> {\n        return this.resourceService.query(this.resource, query, options);\n    }\n\n    public searchSingle(query: string, options?: HalOptions): Observable<T> {\n        return this.resourceService.searchSingle(this.type, query, this.resource, options);\n    }\n\n    public customQuery(query: string, options?: HalOptions, subType?: SubTypeBuilder): Observable<T[]> {\n        return this.resourceService.customQuery(this.type, query, this.resource, this._embedded, options, subType).pipe(\n            mergeMap((resourceArray: ResourceArray<T>) => {\n                if (options && options.notPaged && !Utils.isNullOrUndefined(resourceArray.first_uri)) {\n                    options.notPaged = false;\n                    options.size = resourceArray.totalElements;\n                    return this.customQuery(query, options, subType);\n                } else {\n                    this.resourceArray = resourceArray;\n                    return observableOf(resourceArray.result);\n                }\n            }));\n    }\n\n    public customQueryPost(query: string, options?: HalOptions, body?: any, subType?: SubTypeBuilder): Observable<T[]> {\n        return this.resourceService.customQueryPost(this.type, query, this.resource, this._embedded, options, body, subType).pipe(\n            mergeMap((resourceArray: ResourceArray<T>) => {\n                if (options && options.notPaged && !Utils.isNullOrUndefined(resourceArray.first_uri)) {\n                    options.notPaged = false;\n                    options.size = resourceArray.totalElements;\n                    return this.customQueryPost(query, options, body, subType);\n                } else {\n                    this.resourceArray = resourceArray;\n                    return observableOf(resourceArray.result);\n                }\n            }));\n    }\n\n    public getByRelationArray(relation: string, builder?: SubTypeBuilder): Observable<T[]> {\n        return this.resourceService.getByRelationArray(this.type, relation, this._embedded, builder).pipe(\n            map((resourceArray: ResourceArray<T>) => {\n                this.resourceArray = resourceArray;\n                return resourceArray.result;\n            }));\n    }\n\n    public getByRelation(relation: string): Observable<T> {\n        return this.resourceService.getByRelation(this.type, relation);\n    }\n\n    public count(query?: string, options?: HalOptions): Observable<number> {\n        return this.resourceService.count(this.resource, query, options);\n    }\n\n    public create(entity: T) {\n        return this.resourceService.create(this.resource, entity);\n    }\n\n    public update(entity: T) {\n        return this.resourceService.update(entity);\n    }\n\n    public patch(entity: T) {\n        return this.resourceService.patch(entity);\n    }\n\n    public delete(entity: T): Observable<Object> {\n        return this.resourceService.delete(entity);\n    }\n\n    public totalElement(): number {\n        if (this.resourceArray && this.resourceArray.totalElements)\n            return this.resourceArray.totalElements;\n        return 0;\n    }\n\n    public totalPages(): number {\n        if (this.resourceArray && this.resourceArray.totalPages)\n            return this.resourceArray.totalPages;\n        return 1;\n    }\n\n    public hasFirst(): boolean {\n        if (this.resourceArray)\n            return this.resourceService.hasFirst(this.resourceArray);\n        return false;\n    }\n\n    public hasNext(): boolean {\n        if (this.resourceArray)\n            return this.resourceService.hasNext(this.resourceArray);\n        return false;\n    }\n\n    public hasPrev(): boolean {\n        if (this.resourceArray)\n            return this.resourceService.hasPrev(this.resourceArray);\n        return false;\n    }\n\n    public hasLast(): boolean {\n        if (this.resourceArray)\n            return this.resourceService.hasLast(this.resourceArray);\n        return false;\n    }\n\n    public next(): Observable<T[]> {\n        if (this.resourceArray)\n            return this.resourceService.next(this.resourceArray, this.type).pipe(\n                map((resourceArray: ResourceArray<T>) => {\n                    this.resourceArray = resourceArray;\n                    return resourceArray.result;\n                }));\n        else\n            observableThrowError('no resourceArray found');\n    }\n\n    public prev(): Observable<T[]> {\n        if (this.resourceArray)\n            return this.resourceService.prev(this.resourceArray, this.type).pipe(\n                map((resourceArray: ResourceArray<T>) => {\n                    this.resourceArray = resourceArray;\n                    return resourceArray.result;\n                }));\n        else\n            observableThrowError('no resourceArray found');\n    }\n\n    public first(): Observable<T[]> {\n        if (this.resourceArray)\n            return this.resourceService.first(this.resourceArray, this.type)\n                .pipe(\n                    map((resourceArray: ResourceArray<T>) => {\n                        this.resourceArray = resourceArray;\n                        return resourceArray.result;\n                    })\n                );\n        else\n            observableThrowError('no resourceArray found');\n    }\n\n    public last(): Observable<T[]> {\n        if (this.resourceArray)\n            return this.resourceService.last(this.resourceArray, this.type)\n                .pipe(\n                    map((resourceArray: ResourceArray<T>) => {\n                        this.resourceArray = resourceArray;\n                        return resourceArray.result;\n                    })\n                );\n        else\n            observableThrowError('no resourceArray found');\n    }\n\n    public page(pageNumber: number): Observable<T[]> {\n        if (this.resourceArray)\n            return this.resourceService.page(this.resourceArray, this.type, pageNumber).pipe(\n                map((resourceArray: ResourceArray<T>) => {\n                    this.resourceArray = resourceArray;\n                    return resourceArray.result;\n                }));\n        else\n            observableThrowError('no resourceArray found');\n    }\n}\n","/*\n * Public API Surface of angular-spring-hal\n */\nexport * from './lib/angular-hal.module';\nexport * from './lib/cache'\nexport * from './lib/interceptor'\nexport * from './lib/models'\nexport * from './lib/services'\nexport * from './lib/Utils'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["observableOf","observableThrowError","i1.ExternalService"],"mappings":"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"}