From 05a6c4c39481949d36d0a7a1a22f4973a1208755 Mon Sep 17 00:00:00 2001 From: Erik Larsson Date: Fri, 22 Jan 2021 22:16:54 +0100 Subject: [PATCH] Use RequestOptions --- packages/catalog-client/src/CatalogClient.ts | 50 ++++++++++++-------- packages/catalog-client/src/types.ts | 4 ++ 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts index c4f8c3d2b0..657841c000 100644 --- a/packages/catalog-client/src/CatalogClient.ts +++ b/packages/catalog-client/src/CatalogClient.ts @@ -26,6 +26,7 @@ import { AddLocationResponse, CatalogEntitiesRequest, CatalogListResponse, + CatalogRequestOptions, DiscoveryApi, } from './types'; @@ -37,15 +38,15 @@ export class CatalogClient { } async getLocationById( - token: string | undefined, id: String, + options?: CatalogRequestOptions, ): Promise { - return await this.getOptional(token, `/locations/${id}`); + return await this.getOptional(`/locations/${id}`, options); } async getEntities( - token: string | undefined, request?: CatalogEntitiesRequest, + options?: CatalogRequestOptions, ): Promise> { const { filter = {}, fields = [] } = request ?? {}; const params: string[] = []; @@ -66,36 +67,39 @@ export class CatalogClient { const query = params.length ? `?${params.join('&')}` : ''; const entities: Entity[] = await this.getRequired( - token, `/entities${query}`, + options, ); return { items: entities }; } async getEntityByName( - token: string | undefined, compoundName: EntityName, + options?: CatalogRequestOptions, ): Promise { const { kind, namespace = 'default', name } = compoundName; return this.getOptional( - token, `/entities/by-name/${kind}/${namespace}/${name}`, + options, ); } async addLocation( - token: string | undefined, { type = 'url', target, dryRun }: AddLocationRequest, + options?: CatalogRequestOptions, ): Promise { + const headers = { + 'Content-Type': 'application/json', + } as { [header: string]: string }; + if (options?.token) { + headers.authorization = `Bearer ${options.token}`; + } const response = await fetch( `${await this.discoveryApi.getBaseUrl('catalog')}/locations${ dryRun ? '?dryRun=true' : '' }`, { - headers: { - authorization: `Bearer ${token}`, - 'Content-Type': 'application/json', - }, + headers, method: 'POST', body: JSON.stringify({ type, target }), }, @@ -123,13 +127,13 @@ export class CatalogClient { } async getLocationByEntity( - token: string | undefined, entity: Entity, + options?: CatalogRequestOptions, ): Promise { const locationCompound = entity.metadata.annotations?.[LOCATION_ANNOTATION]; const all: { data: Location }[] = await this.getRequired( - token, '/locations', + options, ); return all .map(r => r.data) @@ -137,15 +141,15 @@ export class CatalogClient { } async removeEntityByUid( - token: string | undefined, uid: string, + options?: CatalogRequestOptions, ): Promise { const response = await fetch( `${await this.discoveryApi.getBaseUrl('catalog')}/entities/by-uid/${uid}`, { - headers: { - authorization: `Bearer ${token}`, - }, + headers: options?.token + ? { authorization: `Bearer ${options.token}` } + : {}, method: 'DELETE', }, ); @@ -163,12 +167,14 @@ export class CatalogClient { // private async getRequired( - token: string | undefined, path: string, + options?: CatalogRequestOptions, ): Promise { const url = `${await this.discoveryApi.getBaseUrl('catalog')}${path}`; const response = await fetch(url, { - headers: token ? { authorization: `Bearer ${token}` } : {}, + headers: options?.token + ? { authorization: `Bearer ${options.token}` } + : {}, }); if (!response.ok) { @@ -181,12 +187,14 @@ export class CatalogClient { } private async getOptional( - token: string | undefined, path: string, + options?: CatalogRequestOptions, ): Promise { const url = `${await this.discoveryApi.getBaseUrl('catalog')}${path}`; const response = await fetch(url, { - headers: token ? { authorization: `Bearer ${token}` } : {}, + headers: options?.token + ? { authorization: `Bearer ${options.token}` } + : {}, }); if (!response.ok) { diff --git a/packages/catalog-client/src/types.ts b/packages/catalog-client/src/types.ts index e72317d444..66fbedd38e 100644 --- a/packages/catalog-client/src/types.ts +++ b/packages/catalog-client/src/types.ts @@ -25,6 +25,10 @@ export type CatalogListResponse = { items: T[]; }; +export type CatalogRequestOptions = { + token: string | undefined; +}; + export interface CatalogApi { getLocationById(id: String): Promise; getEntityByName(name: EntityName): Promise;