UNPKG

@deltares/fews-pi-requests

Version:

Library for making requests to the FEWS PI webservice

693 lines (692 loc) 28.3 kB
import type { TimeSeriesResponse } from './response/timeseries'; import type { ModuleRuntimesResponse, TaskRunsResponse } from './response/tasks'; import type { LocationsResponse } from './response/locations'; import type { ImportStatusResponse } from './response/importStatus'; import type { VersionResponse } from './response/version'; import type { BaseFilter, TaskRunsFilter, TimeSeriesFilter, TimeSeriesGridFilter, LocationsFilter, LocationsTooltipFilter, ParametersFilter, ProcessDataFilter, ReportsFilter, ReportFilter, RunTaskFilter, TimeSeriesGridActionsFilter, TimeSeriesTopologyActionsFilter, FilterActionsFilter, WorkflowsFilter, ModuleRuntimesFilter, LogDisplaysFilter, LogDisplayLogsFilter, DashboardsFilter, WhatIfScenariosFilter, WhatIfTemplatesFilter, PostWhatIfScenarioFilter, ComponentSettingsFilter, TimeSeriesGridMaxValuesFilter, HistoryEditsFilter, TopologyActionFilter, ForecasterNoteRequest, ForecasterNotesFilter, FssInfoFilter, ForecastTimesFilter, TopologyThresholdFilter, ForecasterNoteKeysRequest, LogDisplayLogsActionRequest, CorrelationFilter, DataAnalysisDisplaysFilter, TaskRunStatusFilter, UserSettingsFilter, PostUserSettingsFilter, UserSettingsUsersFilter, TimeStepsFilter, MessagesFilter, TopicsMessagesWithAttachments } from "./requestParameters"; import type { ActionsResponse, DisplayGroupsNodesResponse, WebOcConfigurationResponse, TimeSeriesFlagsResponse, TimeSeriesFlagSourcesResponse, TimeSeriesParametersResponse, HistoryEditsResponse, TopologyThresholdNodeResponse, ReportsResponse, WorkflowResponse, LogsDisplayLogsResponse, LogsDisplaysResponse, WhatIfTemplatesResponse, WhatIfScenarioDescriptorsResponse, PostWhatIfScenarioResponse, WebOCDashboardsResponse, WebOCComponentSettingsResponse, TopologyNodeResponse, ForecasterNotesResponse, WorkflowFssInfoResponse, WorkflowForecastTimesResponse, TimeStepsResponse, ColorsResponse, DynamicReportDisplayCapabilitiesResponse, DynamicReportDisplayDataResponse, CorrelationResponse, DataAnalysisDisplaysResponse, TaskRunStatusResponse, UserSettingUsersResponse, WebOCMicroFrontEndsResponse, PermissionsResponse, MessagesResponse, TopicsMessagesPostResponse } from "./response"; import type { ParameterGroupsOutputOptions } from './output/parameters/parameterOutputOptions'; import type { ParameterGroupsOutput } from './output/parameters/parameterGroupsOutput'; import { PiRestService } from "@deltares/fews-web-oc-utils"; import type { ResponseParser, TransformRequestFunction } from "@deltares/fews-web-oc-utils"; import { DynamicReportDisplayCapabilitiesFilter, DynamicReportDisplayFilter } from './requestParameters/dynamicDisplayReportFilter'; import { DocumentDisplaysResponse } from './response/documentdisplays'; import { DocumentDisplaysFilter } from './requestParameters/documentDisplaysFilter'; import { MicroFrontEndsFilter } from './requestParameters/microFrontEndsFilter.js'; export declare class PiWebserviceProvider { private _baseUrl; maxUrlLength: number; private readonly explodeQueryParameters; readonly API_ENDPOINT = "rest/fewspiservice/v1"; webservice: PiRestService; /** * Constructor for PiWebserviceProvider * * @param url the base url where the PI service is available * @param options Optional constructor options * @param options.maxUrlLength A number that specifies the maximum length of the URL. If the URL length exceeds this value, the requests will be split up. * @param options.explodeQueryParameters Controls how taskRunIds arrays are serialized. * @param options.transformRequestFn A function that can be used to modify the Request * before it is sent to the server. This function takes a Request as a parameter and returns the modified Request. * If this option is not specified, the Request will be sent as is. */ constructor(url: string, options?: { maxUrlLength?: number; explodeQueryParameters?: boolean; transformRequestFn?: TransformRequestFunction; }); private buildQueryParams; /** * Request locations * * @param filter an object with request query parameters * @returns Locations PI API response * @throws 'Fetch Error' if fetch result is not ok */ getLocations(filter: LocationsFilter): Promise<LocationsResponse>; /** * Request log displays * * @returns Locations PI API response * @throws 'Fetch Error' if fetch result is not ok */ getLogDisplays(filter: LogDisplaysFilter): Promise<LogsDisplaysResponse>; /** * Request mico frontend displays * * @returns Locations PI API response * @throws 'Fetch Error' if fetch result is not ok */ getMicroFrontEnds(filter: MicroFrontEndsFilter): Promise<WebOCMicroFrontEndsResponse>; /** * Request document displays * * @returns DocumentDisplay PI API response * @throws 'Fetch Error' if fetch result is not ok */ getDocumentDisplays(filter: DocumentDisplaysFilter): Promise<DocumentDisplaysResponse>; /** * Request locations * * @param filter an object with request query parameters * @returns LocationsTooltip API response * @throws 'Fetch Error' if fetch result is not ok */ getLocationsTooltip(filter: LocationsTooltipFilter): Promise<string>; /** * Request the history of the edits * * @param filter an object with request query parameters * @returns Locations PI API response * @throws 'Fetch Error' if fetch result is not ok */ getHistoryEdits(filter: HistoryEditsFilter): Promise<HistoryEditsResponse>; /** * Request parameters * * @param filter an object with request query parameters * @param output options to convert output * @returns Parmeters PI API response * @throws 'Fetch Error' if fetch result is not ok */ getParameters(filter: ParametersFilter): Promise<TimeSeriesParametersResponse>; getParameters(filter: ParametersFilter, output?: ParameterGroupsOutputOptions): Promise<ParameterGroupsOutput>; /** * Request time series with a relative url * @param relativeUrl * @returns time series api response * @throws 'Fetch Error' if fetch result is not ok */ getTimeSeriesWithRelativeUrl(relativeUrl: string): Promise<TimeSeriesResponse>; /** * Request Time Series * * @param filter an object with request query parameters * @returns Time Series PI API response * @throws 'Fetch Error' if fetch result is not ok */ getTimeSeriesTopologyActions(filter: TimeSeriesTopologyActionsFilter): Promise<TimeSeriesResponse>; /** * Request Time Series * * @param filter an object with request query parameters * @returns Time Series PI API response * @throws 'Fetch Error' if fetch result is not ok */ getTimeSeries(filter: TimeSeriesFilter): Promise<TimeSeriesResponse>; private getTimeSeriesResponse; /** * Request Time Series Grid * * @param filter an object with request query parameters * @returns Time Series Grid PI API response * @throws 'Fetch Error' if fetch result is not ok */ getTimeSeriesGrid(filter: TimeSeriesGridFilter): Promise<TimeSeriesResponse>; /** * Request Time Series Grid Actions * * @param filter an object with request query parameters * @returns Time Series Grid Actions PI API response * @throws 'Fetch Error' if fetch result is not ok */ getTimeSeriesGridActions(filter: TimeSeriesGridActionsFilter): Promise<ActionsResponse>; /** * Request time series maximum values for a WMS layer. * * @param filter an object with request query parameters * @returns Time series with maximum values for a WMS layer. * @throws 'Fetch Error' if fetch result is not ok */ getTimeSeriesGridMaxValues(filter: TimeSeriesGridMaxValuesFilter): Promise<TimeSeriesResponse>; /** * Request scheduled tasks * * @param filter an object with request query parameters * @returns task runs PI API response * @throws 'Fetch Error' if fetch result is not ok */ getTaskRuns(filter: TaskRunsFilter): Promise<TaskRunsResponse>; private getTaskRunsResponse; /** * Get all the topology nodes of FEWS * * @returns all the topology nodes configured in FEWS * @throws 'Fetch Error' if fetch result is not ok */ getTopologyNodes(): Promise<TopologyNodeResponse>; /** * Get all the active thresholds for the topology nodes * * @param filter an object with request query parameters * @returns all the active thresholds for the topology nodes * @throws 'Fetch Error' if fetch result is not ok */ getTopologyThresholds(filter: TopologyThresholdFilter): Promise<TopologyThresholdNodeResponse>; /** * Get the import status of FEWS * * @returns import status API response * @throws 'Fetch Error' if fetch result is not ok */ getImportStatus(): Promise<ImportStatusResponse>; /** * Get the version of FEWS * * @returns import status API response * @throws 'Fetch Error' if fetch result is not ok */ getVersion(): Promise<VersionResponse>; /** * Get all permissions and whether the current user has them assigned * * @returns import status API response * @throws 'Fetch Error' if fetch result is not ok */ getPermissions(): Promise<PermissionsResponse>; /** * Get the time zone used in FEWS * * @returns import status API response * @throws 'Fetch Error' if fetch result is not ok */ getTimeZoneId(): Promise<string>; /** * Get the configuration of FEWS related to the Web OC. * * @returns Web OC configuration API response * @throws 'Fetch Error' if fetch result is not ok */ getWebOcConfiguration(): Promise<WebOcConfigurationResponse>; /** * Get the configuration of FEWS related to the Web OC that is always available. * * @returns Web OC public configuration API response * @throws 'Fetch Error' if fetch result is not ok */ getWebOcPublicConfiguration(): Promise<WebOcConfigurationResponse>; /** * Get colors that should be used for plotting * @returns colors API response * @throws 'Fetch Error' if fetch result is not ok */ getColors(): Promise<ColorsResponse>; /** * Get the actions for a certain topology node * * @param filter search options for the displays (nodeId) * @returns Display groups API response * @throws 'Fetch Error' if fetch result is not ok */ getTopologyActions(filter: TopologyActionFilter): Promise<ActionsResponse>; getDisplayGroupsNodes(): Promise<DisplayGroupsNodesResponse>; /** * Get the time series flags * * @returns Time series flags API response * @throws 'Fetch Error' if fetch result is not ok */ getFlags(): Promise<TimeSeriesFlagsResponse>; /** * Get the time series flag sources * * @returns Time series flag sources API response * @throws 'Fetch Error' if fetch result is not ok */ getFlagSources(): Promise<TimeSeriesFlagSourcesResponse>; /** * Get the actions for filter * * @param filter search options * @returns Actions API response * @throws 'Fetch Error' if fetch result is not ok */ getFilterActions(filter: FilterActionsFilter): Promise<ActionsResponse>; /** * Get the workflows * * @param filter search options * @returns Workflows API response * @throws 'Fetch Error' if fetch result is not ok */ getWorkflows(filter: WorkflowsFilter): Promise<WorkflowResponse>; /** * Get the module run times * * @param filter search options * @returns Module run times API response * @throws 'Fetch Error' if fetch result is not ok */ getModuleRunTimes(filter: ModuleRuntimesFilter): Promise<ModuleRuntimesResponse>; /** * Get the dashboards * * @param filter search options * @returns Dashboards API response * @throws 'Fetch Error' if fetch result is not ok */ getDashboards(filter: DashboardsFilter): Promise<WebOCDashboardsResponse>; /** * Get the logdisplay logs * * @param filter search options * @returns LogsDisplayLogsResponse API response * @throws 'Fetch Error' if fetch result is not ok */ getLogDisplayLogs(filter: LogDisplayLogsFilter): Promise<LogsDisplayLogsResponse>; /** * Post a log display action * * @param request the log display action request * @returns the response from the server * @throws 'Fetch Error' if fetch result is not ok * */ postLogDisplaysAction(request: LogDisplayLogsActionRequest): Promise<string>; /** * Get the what if templates * * @param filter search options * @returns WhatIfTemplates API response * @throws 'Fetch Error' if fetch result is not ok */ getWhatIfTemplates(filter: WhatIfTemplatesFilter): Promise<WhatIfTemplatesResponse>; /** * Get the component settings * * @param filter search options * @returns ComponentSettings API response * @throws 'Fetch Error' if fetch result is not ok */ getComponentSettings(filter: ComponentSettingsFilter): Promise<WebOCComponentSettingsResponse>; /** * Get the forecaster notes * * @param filter search options * @returns ForecasterNotes API response * @throws 'Fetch Error' if fetch result is not ok */ getForecasterNotes(filter: ForecasterNotesFilter): Promise<ForecasterNotesResponse>; /** * Get the FSS info * * @param filter search options * @returns WorkflowFssInfo API response * @throws 'Fetch Error' if fetch result is not ok */ getFssInfo(filter: FssInfoFilter): Promise<WorkflowFssInfoResponse>; /** * Get the forecast times * * @param filter search options * @returns WorkflowForecastTimes API response * @throws 'Fetch Error' if fetch result is not ok */ getForecastTimes(filter: ForecastTimesFilter): Promise<WorkflowForecastTimesResponse>; postForecasterNoteHelper(body: ForecasterNoteRequest | ForecasterNoteKeysRequest, url: URL): Promise<string>; /** * Post or update a forecaster note * * @param note the forecaster note to post * @returns whether the post was successful * @throws 'Fetch Error' if fetch result is not ok */ postForecasterNote(note: ForecasterNoteRequest): Promise<string>; /** * Delete forecaster notes * * @param keys the forecaster note to post * @returns whether the deletion was successful * @throws 'Fetch Error' if fetch result is not ok */ deleteForecasterNote(keys: ForecasterNoteKeysRequest): Promise<string>; /** * Acknowledge forecaster notes * * @param keys the forecaster notes to acknowledge * @returns whether the acknowledgement was successful * @throws 'Fetch Error' if fetch result is not ok */ acknowledgeForecasterNote(keys: ForecasterNoteKeysRequest): Promise<string>; /** * Unacknowledge forecaster notes * * @param keys the forecaster notes to unacknowledge * @returns whether the acknowledgement was successful * @throws 'Fetch Error' if fetch result is not ok */ unacknowledgeForecasterNote(keys: ForecasterNoteKeysRequest): Promise<string>; getMessages(filter: MessagesFilter): Promise<MessagesResponse>; postTopicMessage(topic: string, body: TopicsMessagesWithAttachments): Promise<TopicsMessagesPostResponse>; /** * Get the what if scenarios * * @param filter search options * @returns WhatIfScenarios API response * @throws 'Fetch Error' if fetch result is not ok */ getWhatIfScenarios(filter: WhatIfScenariosFilter): Promise<WhatIfScenarioDescriptorsResponse>; /** * Post time series edits. * * @param editUrl URL to post the time series edits to * @param timeSeriesEvents Time Series Events to be updated * @returns Updated time series events * @throws 'Fetch Error' if fetch result is not ok */ postTimeSeriesEdit(editUrl: string, timeSeriesEvents: TimeSeriesResponse): Promise<unknown>; /** * Runs a workflow task for a given workflowId. * * @param filter an object with request query parameters * @param piParametersXmlContent URL Encoded model parameters content that validates against the * following xsd: https://fewsdocs.deltares.nl/schemas/version1.0/pi-schemas/pi_modelparameters.xsd * * @returns the taskId of the submitted job. * @throws 'Fetch Error' if fetch result is not ok */ postRunTask(filter: RunTaskFilter, piParametersXmlContent: string): Promise<string>; /** * Runs a what if scenario for a given whatIfTemplateId. * * @param filter an object with request query parameters * @param piParametersXmlContent URL Encoded model parameters content that validates against the * following xsd: https://fewsdocs.deltares.nl/schemas/version1.0/pi-schemas/pi_modelparameters.xsd * @returns the WhatIfScenario of the submitted job. * @throws 'Fetch Error' if fetch result is not ok */ postWhatIfScenario(filter: PostWhatIfScenarioFilter, piParametersXmlContent: string): Promise<PostWhatIfScenarioResponse>; /** * Get the reports for filter * * @param filter search options * @returns Reports API response * @throws 'Fetch Error' if fetch result is not ok */ getReports(filter: ReportsFilter): Promise<ReportsResponse>; /** * Get the report for filter * * @param filter search options * @returns Report API response * @throws 'Fetch Error' if fetch result is not ok */ getReport(filter: ReportFilter): Promise<string>; /** * Get the dynamic display for filter * * @param filter search options * @returns Report API response * @throws 'Fetch Error' if fetch result is not ok */ getDynamicReportDisplay(filter: DynamicReportDisplayFilter): Promise<string>; /** * Get the dynamic display capabilities for filter * * @param filter search options * @returns Report API response * @throws 'Fetch Error' if fetch result is not ok */ getDynamicReportDisplayCapabilities(filter: DynamicReportDisplayCapabilitiesFilter): Promise<DynamicReportDisplayCapabilitiesResponse>; /** * Get the dynamic display data for filter * * @param filter search options * @returns Report API response * @throws 'Fetch Error' if fetch result is not ok */ getDynamicReportDisplayData(filter: DynamicReportDisplayFilter): Promise<DynamicReportDisplayDataResponse>; /** * Get the time steps for filter * * @param filter search options * @returns TimeStepsResponse API response * @throws 'Fetch Error' if fetch result is not ok */ getTimeSteps(filter: TimeStepsFilter): Promise<TimeStepsResponse>; /** * Get the correlation for filter * * @param filter search options * @returns CorrelationResponse API response * @throws 'Fetch Error' if fetch result is not ok */ getCorrelation(filter: CorrelationFilter): Promise<CorrelationResponse>; /** * Get the data analysis displays for filter * * @param filter search options * @returns DataAnalysisDisplaysResponse API response * @throws 'Fetch Error' if fetch result is not ok */ getDataAnalysisDisplays(filter: DataAnalysisDisplaysFilter): Promise<DataAnalysisDisplaysResponse>; /** * Get the task run status for filter * * @param filter search options * @returns TaskRunStatusResponse API response * @throws 'Fetch Error' if fetch result is not ok */ getTaskRunStatus(filter: TaskRunStatusFilter): Promise<TaskRunStatusResponse>; /** * Get the user settings for filter * * @param filter search options * @returns UserSettingsResponse API response * @throws 'Fetch Error' if fetch result is not ok */ getUserSettings<T>(filter: UserSettingsFilter, parser?: ResponseParser<T>): Promise<T>; /** * Post the user settings for filter * * @param filter search options * @param body the body of the request * @returns the response from the server * @throws 'Fetch Error' if fetch result is not ok */ postUserSettings(filter: UserSettingsFilter, body: string): Promise<string>; /** * Get the user settings users for filter * * @param filter search options * @returns UserSettingUsersResponse API response * @throws 'Fetch Error' if fetch result is not ok */ getUserSettingsUsers(filter: UserSettingsUsersFilter): Promise<UserSettingUsersResponse>; /** * Construct URL for locations request * * @param filter an object with request query parameters * @returns complete url for making a request */ locationsUrl(filter: LocationsFilter): URL; /** * Construct URL for log displays request * * @returns complete url for making a request */ logDisplaysUrl(filter: LogDisplaysFilter): URL; /** * Construct URL for micro frontends request * * @returns complete url for making a request */ microFrontEndsUrl(filter: MicroFrontEndsFilter): URL; /** * Construct URL for document displays request * * @returns complete url for making a request */ documentDisplaysUrl(filter: DocumentDisplaysFilter): URL; /** * Construct URL for locations tooltip request * * @param filter an object with request query parameters * @returns complete url for making a request */ locationsTooltipUrl(filter: LocationsTooltipFilter): URL; /** * Construct URL for history edits request * * @param filter an object with request query parameters * @returns complete url for making a request */ historyEditsUrl(filter: HistoryEditsFilter): URL; /** * Construct URL for parameters request * * @param filter an object with request query parameters * @returns complete url for making a request */ parametersUrl(filter: ParametersFilter): URL; /** * Construct URL for time series request * * @param filter an object with request query parameters * @returns complete url for making a request */ timeSeriesUrl(filter: TimeSeriesFilter): URL; /** * Construct URL for time series grid request * * @param filter an object with request query parameters * @returns complete url for making a request */ timeSeriesGridUrl(filter: TimeSeriesGridFilter): URL; /** * Constructs URL for time series grid max values request * * @param filter an object with request query parameters * @returns complete url for making a request */ timeSeriesGridMaxValuesUrl(filter: TimeSeriesGridMaxValuesFilter): URL; /** * Construct URL for display groups request * * @param filter an object with request query parameters * @returns complete url for making a request */ topologyActionsUrl(filter: TopologyActionFilter): URL; /** * Construct URL for time series grid actions request * @param filter an object with request query parameters * @returns */ timeSeriesGridActionsUrl(filter: TimeSeriesGridActionsFilter): URL; /** * Construct URL for filter actions request * * @param filter an object with request query parameters * @returns complete url for making a request */ filterActionsUrl(filter: FilterActionsFilter): URL; /** * Construct URL for display group nodes request * * @returns complete url for making a request */ displayGroupsNodesUrl(): URL; /** * Construct URL for module run times request * * @param filter an object with request query parameters * @returns complete url for making a request */ taskRunsUrl(filter: TaskRunsFilter): URL; /** * Construct URL for import status request * * @returns complete url for making a request */ importStatusUrl(): URL; /** * Construct URL for version information * * @param queryParameters query string * @returns complete url for making a request */ versionUrl(queryParameters: string): URL; /** * Construct URL for permissions request * * @param queryParameters query string * @returns complete url for making a request */ permissionsUrl(filter: TaskRunsFilter): URL; /** * Construct URL for time zone information * * @returns complete url for making a request */ timeZoneIdUrl(): URL; /** * Construct URL for Web OC configuration * * @returns complete url for making a request */ webOcConfigurationUrl(filter: BaseFilter): URL; /** * Construct URL for Web OC configuration * * @returns complete url for making a request */ webOcPublicConfigurationUrl(filter: BaseFilter): URL; /** * * Construct URL for static resources from the Delft-FEWS WebResourceFiles configuration folder. * In case an absolute URL is passed, the passed path will be returned as URL. * * @returns complete url for making a request */ resourcesStaticUrl(resource: string): URL; /** * * Construct URL for icon file from the IconFiles folder. * In case an absolute URL is passed, the passed path will be returned as URL. * * @returns complete url for making a request */ resourcesIconsUrl(resource: string): URL; /** * Construct URL for topology nodes request * * @returns complete url for making a request */ topologyNodesUrl(): URL; /** * Construct URL for topology thresholds request * * @param filter an object with request query parameters * @returns complete url for making a request */ topologyThresholdsUrl(filter: TopologyThresholdFilter): URL; timeSeriesTopologyActionsUrl(filter: TimeSeriesTopologyActionsFilter): URL; flagsUrl(): URL; flagSourcesUrl(): URL; processDataUrl(filter: ProcessDataFilter): URL; runTaskUrl(filter: RunTaskFilter): URL; reportsUrl(filter: ReportsFilter): URL; reportUrl(filter: ReportFilter): URL; dynamicReportDisplayUrl(filter: DynamicReportDisplayFilter | DynamicReportDisplayCapabilitiesFilter, path?: 'capabilities' | 'data'): URL; workflowsUrl(filter: WorkflowsFilter): URL; moduleRunTimesUrl(filter: ModuleRuntimesFilter): URL; dashboardsUrl(filter: DashboardsFilter): URL; logDisplayLogsUrl(filter: LogDisplayLogsFilter): URL; logDisplayActionUrl(logDisplayId: string): URL; whatIfScenariosUrl(filter: WhatIfScenariosFilter): URL; whatIfTemplatesUrl(filter: WhatIfTemplatesFilter): URL; postWhatIfScenarioUrl(filter: PostWhatIfScenarioFilter): URL; componentSettingsUrl(filter: ComponentSettingsFilter): URL; forecasterNotesUrl(filter: ForecasterNotesFilter, action?: 'delete' | 'acknowledge' | 'unacknowledge'): URL; fssInfoUrl(filter: FssInfoFilter): URL; forecastTimesUrl(filter: ForecastTimesFilter): URL; timeSeriesFilterActionsUrl(filter: FilterActionsFilter): URL; timeStepsUrl(filter: TimeStepsFilter): URL; correlationUrl(filter: CorrelationFilter): URL; dataAnalysisDisplaysUrl(filter: DataAnalysisDisplaysFilter): URL; taskRunStatusUrl(filter: TaskRunStatusFilter): URL; userSettingsUrl(filter: UserSettingsFilter): URL; postUserSettingsUrl(filter: PostUserSettingsFilter): URL; userSettingsUsersUrl(filter: UserSettingsUsersFilter): URL; messagesUrl({ messageId, ...filter }: MessagesFilter): URL; postTopicsMessagesUrl(topic: string): URL; }