diff --git a/ccm-apiclient-commons/src/main/typescript/ApiClient.ts b/ccm-apiclient-commons/src/main/typescript/ApiClient.ts index b99830807..6d20a6a24 100644 --- a/ccm-apiclient-commons/src/main/typescript/ApiClient.ts +++ b/ccm-apiclient-commons/src/main/typescript/ApiClient.ts @@ -41,7 +41,7 @@ export interface LibreCcmApiClient { */ put( endpoint: string, - body: RequestBody, + body?: RequestBody, searchParams?: Record ): Promise; /** @@ -298,19 +298,19 @@ export class ApiClientFetchImpl implements LibreCcmApiClient { ); } } catch (err) { - throw new ApiError ( + throw new ApiError( -1, "n/a", "get", `Failed to execute get: ${err}`, - url, + url ); } } async put( endpoint: string, - body: RequestBody, + body?: RequestBody, searchParams?: Record ): Promise { const url = buildUrl(this.#baseUrl, endpoint, searchParams); @@ -327,16 +327,16 @@ export class ApiClientFetchImpl implements LibreCcmApiClient { response.statusText, "get", "API responded with an error.", - url, + url ); } } catch (err) { - throw new ApiError ( + throw new ApiError( -1, "n/a", "get", `Failed to execute get: ${err}`, - url, + url ); } } @@ -351,21 +351,21 @@ export class ApiClientFetchImpl implements LibreCcmApiClient { if (response.ok) { return new FetchResponse(response); } else { - throw new ApiError ( + throw new ApiError( response.status, response.statusText, "get", - "API responded with an error.", - url, + "API responded with an error.", + url ); } } catch (err) { - throw new ApiError ( + throw new ApiError( -1, "n/a", "get", `Failed to execute get: ${err}`, - url, + url ); } } @@ -377,21 +377,21 @@ export class ApiClientFetchImpl implements LibreCcmApiClient { if (response.ok) { return new FetchResponse(response); } else { - throw new ApiError ( + throw new ApiError( response.status, response.statusText, "get", "API responded with an error.", - url, + url ); } } catch (err) { - throw new ApiError ( + throw new ApiError( -1, "n/a", "get", `Failed to execute get: ${err}`, - url, + url ); } } @@ -406,12 +406,12 @@ export class ApiClientFetchImpl implements LibreCcmApiClient { if (response.ok) { return new FetchResponse(response); } else { - throw new ApiError ( + throw new ApiError( response.status, response.statusText, "get", "API responded with an error.", - url, + url ); } } catch (err) { @@ -420,7 +420,7 @@ export class ApiClientFetchImpl implements LibreCcmApiClient { "n/a", "get", `Failed to execute get: ${err}`, - url, + url ); } } @@ -546,15 +546,17 @@ export class ApiClientNodeImpl implements LibreCcmApiClient { resolve(apiResponse); }); }); - request.on("error", (error) => reject( - new ApiError( - -1, - "n/a", - "get", - `Failed to do GET: ${error}`, - url + request.on("error", (error) => + reject( + new ApiError( + -1, + "n/a", + "get", + `Failed to do GET: ${error}`, + url + ) ) - )); + ); request.end(); }); @@ -593,15 +595,21 @@ export class ApiClientNodeImpl implements LibreCcmApiClient { }); }); - request.on("error", (error) => reject(new ApiError( - -1, - "n/a", - "post", - `Failed to do POST: ${error}`, - url - ))); + request.on("error", (error) => + reject( + new ApiError( + -1, + "n/a", + "post", + `Failed to do POST: ${error}`, + url + ) + ) + ); - request.write(body); + if (body) { + request.write(body); + } request.end(); }); @@ -609,7 +617,7 @@ export class ApiClientNodeImpl implements LibreCcmApiClient { put( endpoint: string, - body: ArrayBuffer, + body?: ArrayBuffer, searchParams?: Record ): Promise { return new Promise((resolve, reject) => { @@ -640,15 +648,21 @@ export class ApiClientNodeImpl implements LibreCcmApiClient { }); }); - request.on("error", (error) => reject(new ApiError( - -1, - "n/a", - "put", - `Failed to do PUT: ${error}`, - url - ))); + request.on("error", (error) => + reject( + new ApiError( + -1, + "n/a", + "put", + `Failed to do PUT: ${error}`, + url + ) + ) + ); - request.write(body); + if (body) { + request.write(body); + } request.end(); }); @@ -686,13 +700,17 @@ export class ApiClientNodeImpl implements LibreCcmApiClient { }); }); - request.on("error", (error) => reject(new ApiError( - -1, - "n/a", - "delete", - `Failed to do DELETE: ${error}`, - url - ))); + request.on("error", (error) => + reject( + new ApiError( + -1, + "n/a", + "delete", + `Failed to do DELETE: ${error}`, + url + ) + ) + ); request.end(); }); @@ -732,13 +750,17 @@ export class ApiClientNodeImpl implements LibreCcmApiClient { resolve(apiResponse); }); }); - request.on("error", (error) => reject(new ApiError( - -1, - "n/a", - "head", - `Failed to do HEAD: ${error}`, - url - ))); + request.on("error", (error) => + reject( + new ApiError( + -1, + "n/a", + "head", + `Failed to do HEAD: ${error}`, + url + ) + ) + ); request.end(); }); @@ -778,13 +800,17 @@ export class ApiClientNodeImpl implements LibreCcmApiClient { resolve(apiResponse); }); }); - request.on("error", (error) => reject(new ApiError( - -1, - "n/a", - "options", - `Failed to do OPTIONS: ${error}`, - url - ))); + request.on("error", (error) => + reject( + new ApiError( + -1, + "n/a", + "options", + `Failed to do OPTIONS: ${error}`, + url + ) + ) + ); request.end(); }); @@ -830,7 +856,7 @@ export class IsomorphicClientImpl implements LibreCcmApiClient { put( endpoint: string, - body: ArrayBuffer, + body?: ArrayBuffer, searchParams?: Record ): Promise { if (isFetchAvailable()) { diff --git a/ccm-apiclient-commons/src/main/typescript/ccm-apiclient-commons.ts b/ccm-apiclient-commons/src/main/typescript/ccm-apiclient-commons.ts index 90f04860d..c06e3112e 100644 --- a/ccm-apiclient-commons/src/main/typescript/ccm-apiclient-commons.ts +++ b/ccm-apiclient-commons/src/main/typescript/ccm-apiclient-commons.ts @@ -10,7 +10,7 @@ import { } from "./ApiClient"; export * from "./entities"; -export { LibreCcmApiClient, ApiResponse, ApiError as ApiError, buildUrl }; +export { LibreCcmApiClient, ApiResponse, ApiError, buildUrl }; /** * Build an client for the LibreCCM RESTful API suitable for use in @@ -139,3 +139,20 @@ export function findMissingProperties( const keys = Object.keys(record); return properties.filter((property) => !keys.includes(property)); } + +export function buildIdentifierParam(identifier: string | number): string { + if (typeof identifier === "number") { + return `ID-${identifier}`; + } else { + const strIdentifier: string = identifier as string; + if ( + strIdentifier.match( + /[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}/g + ) + ) { + return `UUID-${identifier}`; + } else { + return identifier; + } + } +}