import { HalOptions } from './rest.service';
import { SubTypeBuilder } from './subtype-builder';
import { Observable } from 'rxjs/internal/Observable';
export declare type Link = {
    href: string;
    templated?: boolean;
};
export declare type Links = {
    [key: string]: Link;
};
export declare abstract class Resource {
    proxyUrl: string;
    rootUrl: string;
    _links: any;
    _subtypes: Map<string, any>;
    subtypes: Map<string, any>;
    constructor();
    getRelation<T extends Resource>(type: {
        new (): T;
    }, relation: string, builder?: SubTypeBuilder, expireMs?: number, isCacheActive?: boolean): Observable<T>;
    getRelationArray<T extends Resource>(type: {
        new (): T;
    }, relation: string, _embedded?: string, options?: HalOptions, builder?: SubTypeBuilder, expireMs?: number, isCacheActive?: boolean): Observable<T[]>;
    getProjection<T extends Resource>(type: {
        new (): T;
    }, resource: string, id: string, projectionName: string, expireMs?: number, isCacheActive?: boolean): Observable<T>;
    getProjectionArray<T extends Resource>(type: {
        new (): T;
    }, resource: string, projectionName: string, expireMs?: number, isCacheActive?: boolean): Observable<T[]>;
    private getResourceUrl;
    private getRelationLinkHref;
    private existRelationLink;
    addRelation<T extends Resource>(relation: string, resource: T): Observable<any>;
    updateRelation<T extends Resource>(relation: string, resource: T): Observable<any>;
    substituteRelation<T extends Resource>(relation: string, resource: T): Observable<any>;
    deleteRelation<T extends Resource>(relation: string, resource: T): Observable<any>;
}
