diff --git a/packages/kbn-server-route-repository-client/index.ts b/packages/kbn-server-route-repository-client/index.ts index d2572e009bd66..dc2fd26f4ef53 100644 --- a/packages/kbn-server-route-repository-client/index.ts +++ b/packages/kbn-server-route-repository-client/index.ts @@ -7,4 +7,10 @@ */ export { createRepositoryClient } from './src/create_repository_client'; -export type { DefaultClientOptions } from '@kbn/server-route-repository-utils'; +export { isHttpFetchError } from './src/is_http_fetch_error'; + +export type { + DefaultClientOptions, + ClientRequestParamsOf, + RouteRepositoryClient, +} from '@kbn/server-route-repository-utils'; diff --git a/packages/kbn-server-route-repository-client/src/is_http_fetch_error.ts b/packages/kbn-server-route-repository-client/src/is_http_fetch_error.ts new file mode 100644 index 0000000000000..82d19cafb404e --- /dev/null +++ b/packages/kbn-server-route-repository-client/src/is_http_fetch_error.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { IHttpFetchError, isHttpFetchError as coreIsHttpFetchError } from '@kbn/core-http-browser'; + +interface ErrorBody { + statusCode: number; + message: string; + error: string; +} + +export function isHttpFetchError(error: unknown): error is IHttpFetchError { + return coreIsHttpFetchError(error); +} diff --git a/packages/kbn-server-route-repository-client/tsconfig.json b/packages/kbn-server-route-repository-client/tsconfig.json index 8ef10ede60a1a..8e70ce9851750 100644 --- a/packages/kbn-server-route-repository-client/tsconfig.json +++ b/packages/kbn-server-route-repository-client/tsconfig.json @@ -16,5 +16,6 @@ "kbn_references": [ "@kbn/server-route-repository-utils", "@kbn/core-lifecycle-browser", + "@kbn/core-http-browser", ] } diff --git a/packages/kbn-server-route-repository-utils/src/typings.ts b/packages/kbn-server-route-repository-utils/src/typings.ts index ff93e760a580a..92580c852e40e 100644 --- a/packages/kbn-server-route-repository-utils/src/typings.ts +++ b/packages/kbn-server-route-repository-utils/src/typings.ts @@ -20,6 +20,38 @@ import { z } from '@kbn/zod'; import * as t from 'io-ts'; import { RequiredKeys } from 'utility-types'; +type PathMaybeOptional }> = RequiredKeys< + T['path'] +> extends never + ? { path?: T['path'] } + : { path: T['path'] }; + +type QueryMaybeOptional }> = RequiredKeys< + T['query'] +> extends never + ? { query?: T['query'] } + : { query: T['query'] }; + +type BodyMaybeOptional }> = RequiredKeys< + T['body'] +> extends never + ? { body?: T['body'] } + : { body: T['body'] }; + +type ParamsMaybeOptional< + TPath extends Record, + TQuery extends Record, + TBody extends Record +> = PathMaybeOptional<{ path: TPath }> & + QueryMaybeOptional<{ query: TQuery }> & + BodyMaybeOptional<{ body: TBody }>; + +type ZodMaybeOptional = ParamsMaybeOptional< + T['path'], + T['query'], + T['body'] +>; + type MaybeOptional }> = RequiredKeys< T['params'] > extends never @@ -93,7 +125,7 @@ type ClientRequestParamsOfType = }> : TRouteParamsRT extends z.Schema ? MaybeOptional<{ - params: z.TypeOf; + params: ZodMaybeOptional>; }> : {}; @@ -104,7 +136,7 @@ type DecodedRequestParamsOfType = }> : TRouteParamsRT extends z.Schema ? MaybeOptional<{ - params: z.TypeOf; + params: ZodMaybeOptional>; }> : {}; @@ -162,7 +194,7 @@ type MaybeOptionalArgs> = RequiredKeys extends export type RouteRepositoryClient< TServerRouteRepository extends ServerRouteRepository, - TAdditionalClientOptions extends Record + TAdditionalClientOptions extends Record = DefaultClientOptions > = >( endpoint: TEndpoint, ...args: MaybeOptionalArgs< diff --git a/packages/kbn-server-route-repository/README.md b/packages/kbn-server-route-repository/README.md index f42bfb4390a20..c34cf6654ba43 100644 --- a/packages/kbn-server-route-repository/README.md +++ b/packages/kbn-server-route-repository/README.md @@ -88,9 +88,7 @@ The client can be created either in `setup` or `start`. > browser/plugin.ts ```javascript -import { isHttpFetchError } from '@kbn/core-http-browser'; -import { DefaultClientOptions } from '@kbn/server-route-repository-utils'; -import { createRepositoryClient } from '@kbn/server-route-repository-client'; +import { createRepositoryClient, isHttpFetchError, DefaultClientOptions } from '@kbn/server-route-repository-client'; import type { MyPluginRouteRepository } from '../server/plugin'; export type MyPluginRepositoryClient =