@azure-utils/storybooks
Version:
Utils to upload and manage Storybooks via Azure Functions and storage.
116 lines (111 loc) • 2.43 kB
text/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;
}