From 8b952c6b05c50f3f29f2e4b44ace443adf07f10e Mon Sep 17 00:00:00 2001 From: "Miquel A. Cabot" Date: Thu, 14 Jul 2022 13:28:02 +0200 Subject: [PATCH] add querySearch() function --- src/aquarius/Aquarius.ts | 55 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/aquarius/Aquarius.ts b/src/aquarius/Aquarius.ts index 823010c2..035c7f16 100644 --- a/src/aquarius/Aquarius.ts +++ b/src/aquarius/Aquarius.ts @@ -1,6 +1,30 @@ import { LoggerInstance, sleep } from '../utils' import { Asset, DDO, ValidateMetadata } from '../@types/' import fetch from 'cross-fetch' + +export interface SearchQuery { + from?: number + size?: number + query: { + match?: { + [property: string]: + | string + | number + | boolean + | Record + } + // eslint-disable-next-line camelcase + query_string?: { + [property: string]: string | number | string[] | number[] | boolean + } + // eslint-disable-next-line camelcase + simple_query_string?: { + [property: string]: string | number | string[] | number[] | boolean + } + } + sort?: { [jsonPath: string]: string } +} + export class Aquarius { public aquariusURL /** @@ -121,6 +145,37 @@ export class Aquarius { } return status } + + /** + * Search over the DDOs using a query. + * @param {SearchQuery} query Query to filter the DDOs. + * @param {AbortSignal} signal abort signal + * @return {Promise} + */ + public async querySearch(query: SearchQuery, signal?: AbortSignal): Promise { + const path = this.aquariusURL + '/api/aquarius/assets/query' + + try { + const response = await fetch(path, { + method: 'POST', + body: JSON.stringify(query), + headers: { + 'Content-Type': 'application/json' + }, + signal: signal + }) + + if (response.ok) { + return response.json() + } else { + LoggerInstance.error('querySearch failed: ', response.status, response.statusText) + return null + } + } catch (error) { + LoggerInstance.error('Error querying metadata: ', error) + throw new Error('Error querying metadata: ', error) + } + } } export default Aquarius