@azure-utils/storybooks
Version:
Utils to upload and manage Storybooks via Azure Functions and storage.
87 lines (86 loc) • 2.48 kB
TypeScript
import type { HttpHandler, HttpRequest, HttpResponse, HttpResponseInit, InvocationContext } from "@azure/functions";
import type z from "zod";
/**
* Type for the callback function to check permissions.
*
* Return true to allow access, or following to deny:
* - false - returns 403 response
* - HttpResponse - returns the specified HTTP response
*/
export type CheckPermissionsCallback = (permissions: Permission[], context: InvocationContext, request: HttpRequest) => boolean | HttpResponse | HttpResponseInit | Promise<boolean | HttpResponse | HttpResponseInit>;
/**
* Type of permission to check
*/
export type Permission = {
resource: PermissionResource;
action: PermissionAction;
projectId?: string;
};
/**
* Type of possible resources to check permissions for
*/
export type PermissionResource = "project" | "build" | "label" | "openapi" | "ui";
/**
* Type of possible actions to check permissions for
*/
export type PermissionAction = "create" | "read" | "update" | "delete";
export interface OpenAPIOptions {
/**
* Enable or disable openAPI schema endpoint.
* @default false
*/
disabled?: boolean;
/**
* Title of the OpenAPI schema
* @default SERVICE_NAME (storybooks)
*/
title?: string;
/**
* A version visible in the OpenAPI schema.
* @default process.env['NODE_ENV']
*/
version?: string;
/**
* Servers to be included in the OpenAPI schema.
*/
servers?: Array<{
url: string;
description?: string;
variables?: Record<string, {
enum?: string[] | boolean[] | number[];
default: string | boolean | number;
description?: string;
}>;
}>;
}
/**
* @private
* Options for configuring the router
*/
export interface RouterOptions {
/**
* Whether the router requires authentication.
*/
authLevel?: "admin";
/**
* Name of the service
*/
serviceName: string;
/**
* The base route for the router.
*/
baseRoute: string;
/**
* Enable or disable OpenAPI schema generation.
*/
openAPIEnabled: boolean;
/**
* A base schema for path parameters based on baseRoute.
*/
basePathParamsSchema: z.ZodObject;
/**
* A wrapper function for the HTTP handler.
* It adds request-specific context to the handler.
*/
handlerWrapper: (handler: HttpHandler, permissions: Permission[]) => HttpHandler;
}