diff --git a/packages/catalog-client/src/schema/openapi/generated/apis/DefaultApi.client.ts b/packages/catalog-client/src/schema/openapi/generated/apis/DefaultApi.client.ts new file mode 100644 index 0000000000..11fa561e19 --- /dev/null +++ b/packages/catalog-client/src/schema/openapi/generated/apis/DefaultApi.client.ts @@ -0,0 +1,653 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { DiscoveryApi } from '../types/discovery'; +import { FetchApi } from '../types/fetch'; +import crossFetch from 'cross-fetch'; +import { pluginId } from '../pluginId'; +import * as parser from 'uri-template'; + +import { AnalyzeLocationRequest } from '../models/AnalyzeLocationRequest.model'; +import { AnalyzeLocationResponse } from '../models/AnalyzeLocationResponse.model'; +import { CreateLocation201Response } from '../models/CreateLocation201Response.model'; +import { CreateLocationRequest } from '../models/CreateLocationRequest.model'; +import { EntitiesBatchResponse } from '../models/EntitiesBatchResponse.model'; +import { EntitiesQueryResponse } from '../models/EntitiesQueryResponse.model'; +import { Entity } from '../models/Entity.model'; +import { EntityAncestryResponse } from '../models/EntityAncestryResponse.model'; +import { EntityFacetsResponse } from '../models/EntityFacetsResponse.model'; +import { GetEntitiesByRefsRequest } from '../models/GetEntitiesByRefsRequest.model'; +import { GetLocations200ResponseInner } from '../models/GetLocations200ResponseInner.model'; +import { Location } from '../models/Location.model'; +import { RefreshEntityRequest } from '../models/RefreshEntityRequest.model'; +import { ValidateEntityRequest } from '../models/ValidateEntityRequest.model'; + +/** + * Wraps the Response type to convey a type on the json call. + * + * @public + */ +export type TypedResponse = Omit & { + json: () => Promise; +}; + +/** + * Options you can pass into a request for additional information. + * + * @public + */ +export interface RequestOptions { + token?: string; +} + +/** + * @public + */ +export type AnalyzeLocation = { + body: AnalyzeLocationRequest; +}; +/** + * @public + */ +export type CreateLocation = { + body: CreateLocationRequest; + query: { + dryRun?: string; + }; +}; +/** + * @public + */ +export type DeleteEntityByUid = { + path: { + uid: string; + }; +}; +/** + * @public + */ +export type DeleteLocation = { + path: { + id: string; + }; +}; +/** + * @public + */ +export type GetEntities = { + query: { + fields?: Array; + limit?: number; + filter?: Array; + offset?: number; + after?: string; + order?: Array; + }; +}; +/** + * @public + */ +export type GetEntitiesByQuery = { + query: { + fields?: Array; + limit?: number; + offset?: number; + orderField?: Array; + cursor?: string; + filter?: Array; + fullTextFilterTerm?: string; + fullTextFilterFields?: Array; + }; +}; +/** + * @public + */ +export type GetEntitiesByRefs = { + body: GetEntitiesByRefsRequest; + query: { + filter?: Array; + }; +}; +/** + * @public + */ +export type GetEntityAncestryByName = { + path: { + kind: string; + namespace: string; + name: string; + }; +}; +/** + * @public + */ +export type GetEntityByName = { + path: { + kind: string; + namespace: string; + name: string; + }; +}; +/** + * @public + */ +export type GetEntityByUid = { + path: { + uid: string; + }; +}; +/** + * @public + */ +export type GetEntityFacets = { + query: { + facet: Array; + filter?: Array; + }; +}; +/** + * @public + */ +export type GetLocation = { + path: { + id: string; + }; +}; +/** + * @public + */ +export type GetLocationByEntity = { + path: { + kind: string; + namespace: string; + name: string; + }; +}; +/** + * @public + */ +export type GetLocations = {}; +/** + * @public + */ +export type RefreshEntity = { + body: RefreshEntityRequest; +}; +/** + * @public + */ +export type ValidateEntity = { + body: ValidateEntityRequest; +}; + +/** + * no description + * @public + */ +export class DefaultApiClient { + private readonly discoveryApi: DiscoveryApi; + private readonly fetchApi: FetchApi; + + constructor(options: { + discoveryApi: { getBaseUrl(pluginId: string): Promise }; + fetchApi?: { fetch: typeof fetch }; + }) { + this.discoveryApi = options.discoveryApi; + this.fetchApi = options.fetchApi || { fetch: crossFetch }; + } + + /** + * Validate a given location. + * @param analyzeLocationRequest - + */ + public async analyzeLocation( + // @ts-ignore + request: AnalyzeLocation, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/analyze-location`; + + const uri = parser.parse(uriTemplate).expand({}); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify(request.body), + }); + } + + /** + * Create a location for a given target. + * @param createLocationRequest - + * @param dryRun - + */ + public async createLocation( + // @ts-ignore + request: CreateLocation, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/locations{?dryRun}`; + + const uri = parser.parse(uriTemplate).expand({ + ...request.query, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify(request.body), + }); + } + + /** + * Delete a single entity by UID. + * @param uid - + */ + public async deleteEntityByUid( + // @ts-ignore + request: DeleteEntityByUid, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/entities/by-uid/{uid}`; + + const uri = parser.parse(uriTemplate).expand({ + uid: request.path.uid, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'DELETE', + }); + } + + /** + * Delete a location by id. + * @param id - + */ + public async deleteLocation( + // @ts-ignore + request: DeleteLocation, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/locations/{id}`; + + const uri = parser.parse(uriTemplate).expand({ + id: request.path.id, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'DELETE', + }); + } + + /** + * Get all entities matching a given filter. + * @param fields - Restrict to just these fields in the response. + * @param limit - Number of records to return in the response. + * @param filter - Filter for just the entities defined by this filter. + * @param offset - Number of records to skip in the query page. + * @param after - Pointer to the previous page of results. + * @param order - + */ + public async getEntities( + // @ts-ignore + request: GetEntities, + options?: RequestOptions, + ): Promise>> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/entities{?fields,limit,filter*,offset,after,order*}`; + + const uri = parser.parse(uriTemplate).expand({ + ...request.query, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Search for entities by a given query. + * @param fields - Restrict to just these fields in the response. + * @param limit - Number of records to return in the response. + * @param offset - Number of records to skip in the query page. + * @param orderField - The fields to sort returned results by. + * @param cursor - Cursor to a set page of results. + * @param filter - Filter for just the entities defined by this filter. + * @param fullTextFilterTerm - Text search term. + * @param fullTextFilterFields - A comma separated list of fields to sort returned results by. + */ + public async getEntitiesByQuery( + // @ts-ignore + request: GetEntitiesByQuery, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/entities/by-query{?fields,limit,offset,orderField*,cursor,filter*,fullTextFilterTerm,fullTextFilterFields}`; + + const uri = parser.parse(uriTemplate).expand({ + ...request.query, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Get a batch set of entities given an array of entityRefs. + * @param filter - Filter for just the entities defined by this filter. + * @param getEntitiesByRefsRequest - + */ + public async getEntitiesByRefs( + // @ts-ignore + request: GetEntitiesByRefs, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/entities/by-refs{?filter*}`; + + const uri = parser.parse(uriTemplate).expand({ + ...request.query, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify(request.body), + }); + } + + /** + * Get an entity's ancestry by entity ref. + * @param kind - + * @param namespace - + * @param name - + */ + public async getEntityAncestryByName( + // @ts-ignore + request: GetEntityAncestryByName, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/entities/by-name/{kind}/{namespace}/{name}/ancestry`; + + const uri = parser.parse(uriTemplate).expand({ + kind: request.path.kind, + namespace: request.path.namespace, + name: request.path.name, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Get an entity by an entity ref. + * @param kind - + * @param namespace - + * @param name - + */ + public async getEntityByName( + // @ts-ignore + request: GetEntityByName, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/entities/by-name/{kind}/{namespace}/{name}`; + + const uri = parser.parse(uriTemplate).expand({ + kind: request.path.kind, + namespace: request.path.namespace, + name: request.path.name, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Get a single entity by the UID. + * @param uid - + */ + public async getEntityByUid( + // @ts-ignore + request: GetEntityByUid, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/entities/by-uid/{uid}`; + + const uri = parser.parse(uriTemplate).expand({ + uid: request.path.uid, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Get all entity facets that match the given filters. + * @param facet - + * @param filter - Filter for just the entities defined by this filter. + */ + public async getEntityFacets( + // @ts-ignore + request: GetEntityFacets, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/entity-facets{?facet*,filter*}`; + + const uri = parser.parse(uriTemplate).expand({ + ...request.query, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Get a location by id. + * @param id - + */ + public async getLocation( + // @ts-ignore + request: GetLocation, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/locations/{id}`; + + const uri = parser.parse(uriTemplate).expand({ + id: request.path.id, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Get a location for entity. + * @param kind - + * @param namespace - + * @param name - + */ + public async getLocationByEntity( + // @ts-ignore + request: GetLocationByEntity, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/locations/by-entity/{kind}/{namespace}/{name}`; + + const uri = parser.parse(uriTemplate).expand({ + kind: request.path.kind, + namespace: request.path.namespace, + name: request.path.name, + }); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Get all locations + */ + public async getLocations( + // @ts-ignore + request: GetLocations, + options?: RequestOptions, + ): Promise>> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/locations`; + + const uri = parser.parse(uriTemplate).expand({}); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'GET', + }); + } + + /** + * Refresh the entity related to entityRef. + * @param refreshEntityRequest - + */ + public async refreshEntity( + // @ts-ignore + request: RefreshEntity, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/refresh`; + + const uri = parser.parse(uriTemplate).expand({}); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify(request.body), + }); + } + + /** + * Validate that a passed in entity has no errors in schema. + * @param validateEntityRequest - + */ + public async validateEntity( + // @ts-ignore + request: ValidateEntity, + options?: RequestOptions, + ): Promise> { + const baseUrl = await this.discoveryApi.getBaseUrl(pluginId); + + const uriTemplate = `/validate-entity`; + + const uri = parser.parse(uriTemplate).expand({}); + + return await this.fetchApi.fetch(`${baseUrl}${uri}`, { + headers: { + 'Content-Type': 'application/json', + ...(options?.token && { Authorization: `Bearer ${options?.token}` }), + }, + method: 'POST', + body: JSON.stringify(request.body), + }); + } +} diff --git a/packages/catalog-client/src/schema/openapi/generated/apis/index.ts b/packages/catalog-client/src/schema/openapi/generated/apis/index.ts index af52f9db46..51dcca33fe 100644 --- a/packages/catalog-client/src/schema/openapi/generated/apis/index.ts +++ b/packages/catalog-client/src/schema/openapi/generated/apis/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export * from './Api.client'; +export * from './DefaultApi.client'; diff --git a/plugins/catalog-backend/src/schema/openapi/generated/apis/DefaultApi.server.ts b/plugins/catalog-backend/src/schema/openapi/generated/apis/DefaultApi.server.ts new file mode 100644 index 0000000000..8789eee1f6 --- /dev/null +++ b/plugins/catalog-backend/src/schema/openapi/generated/apis/DefaultApi.server.ts @@ -0,0 +1,229 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** +import { AnalyzeLocationRequest } from '../models/AnalyzeLocationRequest.model'; +import { AnalyzeLocationResponse } from '../models/AnalyzeLocationResponse.model'; +import { CreateLocation201Response } from '../models/CreateLocation201Response.model'; +import { CreateLocationRequest } from '../models/CreateLocationRequest.model'; +import { EntitiesBatchResponse } from '../models/EntitiesBatchResponse.model'; +import { EntitiesQueryResponse } from '../models/EntitiesQueryResponse.model'; +import { Entity } from '../models/Entity.model'; +import { EntityAncestryResponse } from '../models/EntityAncestryResponse.model'; +import { EntityFacetsResponse } from '../models/EntityFacetsResponse.model'; +import { GetEntitiesByRefsRequest } from '../models/GetEntitiesByRefsRequest.model'; +import { GetLocations200ResponseInner } from '../models/GetLocations200ResponseInner.model'; +import { Location } from '../models/Location.model'; +import { RefreshEntityRequest } from '../models/RefreshEntityRequest.model'; +import { ValidateEntity400Response } from '../models/ValidateEntity400Response.model'; +import { ValidateEntityRequest } from '../models/ValidateEntityRequest.model'; + +/** + * @public + */ +export type AnalyzeLocation = { + body: AnalyzeLocationRequest; + response: AnalyzeLocationResponse | Error | Error; +}; +/** + * @public + */ +export type CreateLocation = { + body: CreateLocationRequest; + query: { + dryRun?: string; + }; + response: CreateLocation201Response | Error | Error; +}; +/** + * @public + */ +export type DeleteEntityByUid = { + path: { + uid: string; + }; + response: void | Error | Error; +}; +/** + * @public + */ +export type DeleteLocation = { + path: { + id: string; + }; + response: void | Error | Error; +}; +/** + * @public + */ +export type GetEntities = { + query: { + fields?: Array; + limit?: number; + filter?: Array; + offset?: number; + after?: string; + order?: Array; + }; + response: Array | Error | Error; +}; +/** + * @public + */ +export type GetEntitiesByQuery = { + query: { + fields?: Array; + limit?: number; + offset?: number; + orderField?: Array; + cursor?: string; + filter?: Array; + fullTextFilterTerm?: string; + fullTextFilterFields?: Array; + }; + response: EntitiesQueryResponse | Error | Error; +}; +/** + * @public + */ +export type GetEntitiesByRefs = { + body: GetEntitiesByRefsRequest; + query: { + filter?: Array; + }; + response: EntitiesBatchResponse | Error | Error; +}; +/** + * @public + */ +export type GetEntityAncestryByName = { + path: { + kind: string; + namespace: string; + name: string; + }; + response: EntityAncestryResponse | Error | Error; +}; +/** + * @public + */ +export type GetEntityByName = { + path: { + kind: string; + namespace: string; + name: string; + }; + response: Entity | Error | Error; +}; +/** + * @public + */ +export type GetEntityByUid = { + path: { + uid: string; + }; + response: Entity | Error | Error; +}; +/** + * @public + */ +export type GetEntityFacets = { + query: { + facet: Array; + filter?: Array; + }; + response: EntityFacetsResponse | Error | Error; +}; +/** + * @public + */ +export type GetLocation = { + path: { + id: string; + }; + response: Location | Error; +}; +/** + * @public + */ +export type GetLocationByEntity = { + path: { + kind: string; + namespace: string; + name: string; + }; + response: Location | Error; +}; +/** + * @public + */ +export type GetLocations = { + response: Array | Error; +}; +/** + * @public + */ +export type RefreshEntity = { + body: RefreshEntityRequest; + response: void | Error | Error; +}; +/** + * @public + */ +export type ValidateEntity = { + body: ValidateEntityRequest; + response: void | ValidateEntity400Response; +}; + +/** + * no description + */ + +export type EndpointMap = { + '#post|/analyze-location': AnalyzeLocation; + + '#post|/locations': CreateLocation; + + '#_delete|/entities/by-uid/{uid}': DeleteEntityByUid; + + '#_delete|/locations/{id}': DeleteLocation; + + '#get|/entities': GetEntities; + + '#get|/entities/by-query': GetEntitiesByQuery; + + '#post|/entities/by-refs': GetEntitiesByRefs; + + '#get|/entities/by-name/{kind}/{namespace}/{name}/ancestry': GetEntityAncestryByName; + + '#get|/entities/by-name/{kind}/{namespace}/{name}': GetEntityByName; + + '#get|/entities/by-uid/{uid}': GetEntityByUid; + + '#get|/entity-facets': GetEntityFacets; + + '#get|/locations/{id}': GetLocation; + + '#get|/locations/by-entity/{kind}/{namespace}/{name}': GetLocationByEntity; + + '#get|/locations': GetLocations; + + '#post|/refresh': RefreshEntity; + + '#post|/validate-entity': ValidateEntity; +}; diff --git a/plugins/catalog-backend/src/schema/openapi/generated/apis/index.ts b/plugins/catalog-backend/src/schema/openapi/generated/apis/index.ts index a3cdbbebd2..79855a6fc8 100644 --- a/plugins/catalog-backend/src/schema/openapi/generated/apis/index.ts +++ b/plugins/catalog-backend/src/schema/openapi/generated/apis/index.ts @@ -14,10 +14,4 @@ * limitations under the License. */ -// - -// ****************************************************************** -// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * -// ****************************************************************** - -export * from './Api.server'; +export * from './DefaultApi.server'; diff --git a/plugins/catalog-backend/src/schema/openapi/generated/router.ts b/plugins/catalog-backend/src/schema/openapi/generated/router.ts index 16b094c73f..8712625653 100644 --- a/plugins/catalog-backend/src/schema/openapi/generated/router.ts +++ b/plugins/catalog-backend/src/schema/openapi/generated/router.ts @@ -788,7 +788,6 @@ export const spec = { '/refresh': { post: { operationId: 'RefreshEntity', - tags: ['Entity'], description: 'Refresh the entity related to entityRef.', responses: { '200': {