import type { ResponseType } from 'axios'; import { z } from 'zod'; import { getUri } from '../../operators/getUri.js'; import { healthcheck } from '../../operators/healthCheck.js'; import { request } from '../../operators/request.js'; import { Caching, Configuration, getDefaultResponseType, type RequestResponseReturnType, type RequestResponseType } from '../../shared.js'; import type { ThreekitAuthProps } from '../../ThreekitAuthProps.js'; import { Route } from '../Route.js'; export enum FastCompositeImageFitMode { Cover = 'cover', Contain = 'contain', FitWidth = 'fitWidth', FitHeight = 'fitHeight' } export enum FastCompositorImageExtension { Png = 'png', Jpg = 'jpg', Webp = 'webp' } export const FastCompositorRequestProps = z.object({ assetId: z.string().uuid(), configuration: Configuration.optional(), height: z.number().optional(), width: z.number().optional(), cropHeight: z.number().optional(), cropWidth: z.number().optional(), cropX: z.number().optional(), cropY: z.number().optional(), format: z.nativeEnum(FastCompositorImageExtension).optional(), imageFitMode: z.nativeEnum(FastCompositeImageFitMode).optional(), skipResolveTags: z.boolean().optional() }); export type FastCompositorRequestProps = z.infer< typeof FastCompositorRequestProps >; const API_ROUTE = `/api/fast-compositor`; export class FastCompositor extends Route { constructor(auth: ThreekitAuthProps) { super(auth, API_ROUTE); } healthcheck() { return healthcheck(this.context); } request( requestProps: FastCompositorRequestProps, caching: Caching = {}, responseType = getDefaultResponseType() ) { return request>(this.context, { params: { ...requestProps, ...caching }, responseType: responseType as ResponseType }); } requestUrl(requestProps: FastCompositorRequestProps, caching: Caching = {}) { return getUri(this.context, { url: '', params: { ...requestProps, ...caching } }); } }