@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
64 lines (63 loc) • 3.23 kB
TypeScript
import StateManager from '../state/statemanager.js';
import ServerOgcApi, { HttpMethod, OgcApiLinksResponse } from '../../models/serverogcapi.js';
import ServerOgc from '../../models/serverogc.js';
export type OgcApiClientOptions = {
crs?: string;
};
/**
* This class covers the common part of the OGC API standard described in https://docs.ogc.org/is/19-072/19-072.html.
* It contains shared methods between clients of different OGC API standards.
* Any OGC API (Maps, Records, Features, STAC...) shall extend this class.
*/
export default abstract class OgcApiClient<Server = ServerOgcApi> {
protected readonly serverOgc: ServerOgc;
private server?;
private readonly stateManager;
protected readonly options: OgcApiClientOptions;
initialized: boolean;
protected get state(): import("../main.js").State;
get url(): string;
constructor(serverOgc: ServerOgc, opt: OgcApiClientOptions, stateManager: StateManager);
getServer(): Promise<Server>;
protected describeServer(): Promise<Server>;
protected abstract getUrl(): string;
protected abstract loadDescribeServer(): Promise<Server>;
/**
* Load the list of conformance classes, which describe what kind of functionality the server provides.
*/
loadConformance(): Promise<string[]>;
/**
* Fetches and retrieves links from the specified path or URL and returns them in a sanitized format.
*/
getLinks(path: string | URL): Promise<OgcApiLinksResponse[]>;
/**
* Retrieves a specific link from the OGC API resource based on the given relation and encoding type.
*/
getLink(relation: string, path?: string | URL, encodingType?: string): Promise<string>;
/**
* Fetches all paginated resources from the specified URL until the entire dataset is retrieved.
* `dataListName` is the attribute name that holds the list of data items in the response JSON.
* For feature items, the attribute name is 'features', for collections, it's 'collections'.
*/
fetchAll(url: string | URL, dataListName: string, fetchOptions: RequestInit): Promise<any[]>;
protected getFetchOptions(method?: HttpMethod): RequestInit;
/**
* Sanitizes a list of links by ensuring that their URLs are consistent with the original request URL.
* Sanitizes if the original URL does not match the link in the `self` href.
* Limitation: Only works if the original URL and the faulty link share at least one common URL path element, e.g.:
* '/api/' in (original) https://example.com/api/ and (faulty) https://12345-example.com:8080/mapserv_proxy/api/
*
* @param {string} originalPath - The URL of the original request.
* @param {OgcApiLinksResponse[] | undefined} links - The array of links to sanitize.
* @return {OgcApiLinksResponse[]} The sanitized list of links.
*/
protected sanitizeLinks(originalPath: string | URL, links: OgcApiLinksResponse[] | undefined): OgcApiLinksResponse[];
/**
* Compares two URLs to determine if they are identical, ignoring URL parameters.
*/
private areIdenticalUrls;
/**
* Finds the first common path segment between two given URLs.
*/
private findFirstCommonPath;
}