UNPKG

@knapsack/app

Version:

Build Design Systems with Knapsack

156 lines • 5.3 kB
import type { Except, KsAppClientData, RendererId, TemplateSuggestionsGetFn, ApiRoute, TemplateInfo, GeneralDiscovery, KsTemplateSpec, PathAbsolute, PathRelative, RendererDiscovery, PackageJson } from '@knapsack/types'; import type { Request } from 'express'; export interface KnapsackDataStoreSaveBody { state: KsAppClientData; } export type PatternRenderDataWithDemoId = { patternId: string; templateId: string; assetSetId: string; demoId: string; }; export type PatternRenderData = { patternId: string; templateId: string; assetSetId?: string; wrapHtml?: boolean; isInIframe?: boolean; cacheBuster?: string; /** * Data id for Demo from `saveData()` * @see {@link Demo} */ dataId: string; /** * ID for @see {ContentStateForRendering} */ stateId: string; }; export type TemplateSuggestionsReqParams = Except<Parameters<TemplateSuggestionsGetFn>[0], 'state'> & { /** * ID from saving {@link ContentStateForRendering} to `api.knapsack.cloud/render-data */ stateId: string; }; export type TemplateSuggestionsResBody = { type: 'success'; data: Awaited<ReturnType<TemplateSuggestionsGetFn>>; } | { type: 'error.invalidParams'; message: string; } | { type: 'error.pathNotFound'; message: string; } | { type: 'error.couldNotParse'; message: string; }; export type RouteDiscovery = ApiRoute<{ path: '/api/v2/discovery'; method: 'GET'; output: GeneralDiscovery; }>; export type RouteRendererDiscovery<TheRendererId extends RendererId = RendererId> = ApiRoute<{ path: '/api/v2/renderer-discovery'; method: 'GET'; input: { rendererId: TheRendererId; }; output: RendererDiscovery<TheRendererId>; }>; export type RoutePkgInfo = ApiRoute<{ path: '/api/v2/pkg-info'; method: 'GET'; input: { pkgName: string; }; output: { pkgName: string; pkgJson: PackageJson; isFromNodeModules: boolean; relativePath: PathRelative; }; }>; /** * Send up a JSON object, get back a dataId that can be used to render a demo */ export type SaveDataRoute = ApiRoute<{ path: '/api/v1/save-data'; method: 'POST'; input: Record<string, unknown>; output: { ok: true; data: { dataId: string; }; }; }>; export type RouteInspect = ApiRoute<{ path: '/api/v2/inspect'; method: 'GET'; input: TemplateInfo; output: { type: 'success'; spec: KsTemplateSpec; } | { type: 'noSpecInferred'; } | { type: 'error.unknown'; message: string; } | { type: 'renderer.notFound'; } | { type: 'renderer.noInspectSupported'; }; }>; export type EndpointPaths = '/' | '/demo-urls-data' | RouteInspect['path'] | RouteDiscovery['path'] | RouteRendererDiscovery['path'] | RoutePkgInfo['path'] | '/demo-urls' | '/api/v1' | '/api/v1/data-store' | '/api/v1/data/metaState' | '/api/v1/data-store-prep' | '/api/v1/files' | '/api/v1/render' | '/api/v1/render-demo-id' | '/api/v1/plugins' | '/api/v1/template-suggestions' | '/api/v1/save-data'; /** * A setting for the minimum role required for an endpoint * Is currently a single string and not a boolean to allow for future expansion * If absent then the endpoint is public * VIEWER means either site is private and user at least a viewer or site is public */ export type EndpointAuthLevel = 'VIEWER'; export type EndpointGet<Data extends Record<string, any>, ResBody extends Record<string, any> | string, EndpointPath extends EndpointPaths = EndpointPaths> = { path: EndpointPath; method: 'GET'; validateQuery?: (query: Data) => void; handle: (req: Request<unknown, unknown, unknown, Data>) => Promise<ResBody>; authLevel?: EndpointAuthLevel; }; type EndpointPost<Data extends Record<string, any>, ResBody extends Record<string, any> | string, EndpointPath extends EndpointPaths = EndpointPaths> = { path: EndpointPath; method: 'POST'; validateBody?: (body: Data) => void; handle: (req: Request<unknown, unknown, Data>) => Promise<ResBody>; authLevel?: EndpointAuthLevel; }; export type Endpoint<Data extends Record<string, any>, ResBody extends Record<string, any> | string, EndpointPath extends EndpointPaths = EndpointPaths> = EndpointGet<Data, ResBody, EndpointPath> | EndpointPost<Data, ResBody, EndpointPath>; export type ExtractEndpointData<T extends Endpoint<any, any>> = T extends Endpoint<infer Data, any> ? Data : never; export type ExtractEndpointResBody<T extends Endpoint<any, any>> = T extends Endpoint<any, infer ResBody> ? ResBody : never; export type EndpointFiles = EndpointPost<{ type: 'verify'; payload: { path: string; rendererId: RendererId; }; }, { type: 'verify'; payload: { exists: boolean; relativePath: PathRelative; absolutePath: PathAbsolute; type: 'absolute' | 'relative' | 'package' | 'unknown'; }; }, '/api/v1/files'>; export type EndpointPlugins = EndpointPost<{ type: 'getContent'; pluginId: string; }, { type: 'getContent'; ok: boolean; message?: string; payload: Record<string, unknown>; }, '/api/v1/plugins'>; export {}; //# sourceMappingURL=endpoints.d.ts.map