/** * Do not edit this file it is auto-generated by io-utils / gen-api-models. * See https://github.com/pagopa/io-utils */ /* eslint-disable */ import { withoutUndefinedValues } from "@pagopa/ts-commons/lib/types"; import { RequestParams, TypeofApiCall, TypeofApiParams, createFetchRequestForApi, ReplaceRequestParams } from "@pagopa/ts-commons/lib/requests"; import { identity } from "fp-ts/lib/function"; import { NotifyT, notifyDefaultDecoder } from "./requestTypes"; // This is a placeholder for undefined when dealing with object keys // Typescript doesn't perform well when narrowing a union type which includes string and undefined // (example: "foo" | "bar" | undefined) // We use this as a placeholder for type parameters indicating "no key" type __UNDEFINED_KEY = "_____"; export type ApiOperation = TypeofApiCall; export type ParamKeys = keyof TypeofApiParams; /** * Defines an adapter for TypeofApiCall which omit one or more parameters in the signature * @param ApiT the type which defines the operation to expose * @param K the parameter to omit. undefined means no parameters will be omitted */ export type OmitApiCallParams< ApiT, K extends ParamKeys | __UNDEFINED_KEY = __UNDEFINED_KEY > = ( op: TypeofApiCall ) => K extends __UNDEFINED_KEY ? TypeofApiCall : TypeofApiCall, K>>>; /** * Defines an adapter for TypeofApiCall which omit one or more parameters in the signature * @param ApiT the type which defines the operation to expose * @param K the parameter to omit. undefined means no parameters will be omitted */ export type WithDefaultsT< K extends ParamKeys | __UNDEFINED_KEY = __UNDEFINED_KEY > = OmitApiCallParams; /** * Defines a collection of api operations * @param K name of the parameters that the Clients masks from the operations */ export type Client< K extends ParamKeys | __UNDEFINED_KEY = __UNDEFINED_KEY > = K extends __UNDEFINED_KEY ? { readonly notify: TypeofApiCall; } : { readonly notify: TypeofApiCall< ReplaceRequestParams, K>> >; }; /** * Create an instance of a client * @param params hash map of parameters thata define the client: * - baseUrl: the base url for every api call (required) * - fetchApi: an implementation of the fetch() web API, depending on the platform (required) * - basePath: optional path to be appended to the baseUrl * - withDefaults: optional adapter to be applied to every operation, to omit some paramenters * @returns a collection of api operations */ export function createClient(params: { baseUrl: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any fetchApi: typeof fetch; withDefaults: WithDefaultsT; basePath?: string; }): Client; export function createClient(params: { baseUrl: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any fetchApi: typeof fetch; withDefaults?: undefined; basePath?: string; }): Client; export function createClient({ baseUrl, // eslint-disable-next-line @typescript-eslint/no-explicit-any fetchApi, withDefaults, basePath = "/api/v1" }: { baseUrl: string; // eslint-disable-next-line @typescript-eslint/no-explicit-any fetchApi: typeof fetch; withDefaults?: WithDefaultsT; basePath?: string; }) { const options = { baseUrl, fetchApi }; const notifyT: ReplaceRequestParams> = { method: "post", headers: () => ({ "Content-Type": "application/json" }), response_decoder: notifyDefaultDecoder(), url: ({}) => `${basePath}/notify`, body: ({ ["body"]: body }) => JSON.stringify(body), query: () => withoutUndefinedValues({}) }; const notify: TypeofApiCall = createFetchRequestForApi( notifyT, options ); return { notify: (withDefaults || identity)(notify) }; }